Linux執行定時任務(crontab)遇到的坑

文章目錄

    • 前言:
  • 1、建立定時任務的兩種方式
    • 1.1、crontab -e
    • 1.2、vi /etc/ crontab
  • 2、兩種方法的區別
    • 2.1、用戶級
    • 2.2、系統級
  • 3、解決辦法

前言:

之前第一次要在生產環境部署定時任務,無奈的是,博主對定時任務這塊還是個小白,但是任務卻需要部署一連串的定時任務,前后的定時任務之間還有關聯。。。由于數據采集的時間有特殊要求,所以整個流程就挺惡心的更別說部署了,部署之后有想過用Azkaban來串聯多個定時任務,但是由于其他原因也沒來得及實踐,這里記錄下期間遇到的坑。

剛開始實現第一個crontab定時任務時,就遇到很多問題。這里參考了網上的一些文章,如:

第一步:寫cron腳本文件,命名為crontest.cron。 
15,30,45,59 * * * * echo “xgmtest…..” >> xgmtest.txt 表示,每隔15分鐘,執行打印一次命令第二步:添加定時任務。執行命令 “crontab crontest.cron”。搞定第三步:”crontab -l” 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本

1、建立定時任務的兩種方式

但是差點把之前老員工部署的定時任務給搞丟(由于不懂原理差點鑄成大錯)。。所以就先來說下定時任務的兩種添加方式:

1.1、crontab -e

#直接寫入定時任務
*/10 17-18 * * * root tcpdump -i eth0 tcp port 80 -s 0 -w sohu1.txt
*/10 17-18 * * * root tcpdump -i eth0 tcp port 80 -s 0 -w sohu1.cap

1.2、vi /etc/ crontab

vi /etc/ crontab
#添加定時任務 
30 10 * * * root /sbin/reboot重新加載配置
/sbin/service crond reload
重啟cron
/sbin/service crond restart

2、兩種方法的區別

crontab -e對應的是用戶級,vi /etc/ crontab對應的系統級的

2.1、用戶級

使用crontab -e 這個命令會自動打開vim然后編輯定時腳本文件,編寫后保存,在ubuntu下會被寫到/var/spool/cron/crontabs目錄下,生成一個和用戶名一致的文件,我們可以直接用crontab -l查看內容,

ml@linux:~$ crontab -e
ml@linux:~$ crontab -l
30 * * * * /home/ml/tools/login.sh
ml@linux:~$ sudo cat /var/spool/cron/crontabs/ml
30 * * * * /home/ml/tools/login.sh

2.2、系統級

cronotab -e是針對用戶來設計的,如果是系統的例行性任務,需要編輯/etc/crontab這個文件,編輯完所有用戶都會受其影響:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0 * * * *  root /home/ml/tools/login.sh

每列分別是分、時、日、月及周進行一次的工作!但是在五個字段后面接的并不是命令,而是執行命令的身份!這個用戶的crontab -e不相同。由于用戶自己的crontab并不需要指定身份,但/etc/crontab里面需指定身份。

OK,添加了定時任務就要看這個定時任務是否生效,但是實際操作中執行定時的python腳本時,如下

#40 15 * * * /usr/local/bin/python3  /opt/FileTransclation.py(每天在15:40自動上傳文件)

卻報各種錯誤,基本上全是和環境相關,但問題是,我再Linux下手動執行改腳本時,卻沒有任何問題,這里大膽懷疑定時任務在執行這個python腳本時用的別的環境變量,后來查了資料發現,懷疑果然成立,crontab有自己的用戶,在執行腳本的時候會用自己的環境變量,而我們用的是我們自己的環境變量(裝有python及所需環境),所以也就能解釋為什么執行python腳本會失敗了。根據網上的文章一頓操作,修改了crontab的啟動時的環境變量,但是發現問題依舊存在。。。但是,這就真的沒有其他的解決辦法了嗎?怎么會,既然沒法直接啟動python腳本,我們可以間接啟嗎!既然crontab的環境變量和用戶的環境變量有差異,那我們就利用兩者的環境變量相同的地方。

3、解決辦法

通過自定義shell腳本,然后用定時任務來啟shell腳本(shell環境變量兩者肯定都有吧),在shell腳本里面來啟Python腳本,但前提是你要指定對應的環境變量
模板如下:
第一步:添加定時任務

crontab -e 
#添加定時任務
40 09 * * * cd /root/auto_call; ./start_auto_call.sh >> auto_call.log 2>&1

第二步:創建shell腳本
vi start_auto_call.sh

#!/bin/bash
. /etc/profile
. ~/.bash_profile
set -xpython auto_call.py  

這樣只要能在你當前環境下運行的任務,也一定可以在crontab中運行!

參考:https://blog.csdn.net/idkevin/article/details/72948962

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456419.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue:解決[Vue warn]: Failed to resolve directive: modle (found in Anonymous)

解決問題 [Vue warn]: Failed to resolve directive: modle (found in <ComponentA>) console.error(("[Vue warn]: " msg trace)); 原因是 我把model 寫成了 modle 這類錯誤一般是單詞寫錯了 (found in <Anonymous>) 解決思路

Oracle樹查詢及相關函數

Oracle樹查詢的最重要的就是select...start with... connect by ...prior 語法了。依托于該語法&#xff0c;我們可以將一個表形結構的中以樹的順序列出來。在下面列述了Oracle中樹型查詢的常用查詢方式以及經常使用的與樹查詢相關的Oracle特性函數等&#xff0c;在這里只涉及到…

Mysql常用函數總結

文章目錄前言&#xff1a;1、日期相關函數1.1、mysql獲取未來、現在、過去的時間&#xff1a;DATE_SUB&#xff08;&#xff09;、DATE_ADD()1.2、格式化日期&#xff1a;date_format&#xff08;&#xff09;1.3、MySQL 日期、時間相減函數&#xff1a;datediff(date1,date2),…

一行Python代碼制作動態二維碼

目錄 1、普通二維碼 2、藝術二維碼 3、動態二維碼 在GitHub上發現了一個比較有意思的項目&#xff0c;只需要一行Python代碼就可以快捷方便生成普通二維碼、藝術二維碼(黑白/彩色)和動態GIF二維碼。 GitHub網站參加&#xff1a;https://github.com/sylnsfar/qrcode 用法比…

Vue常用經典開源項目匯總參考-海量

Vue常用經典開源項目匯總參考-海量 Vue是什么&#xff1f; Vue.js&#xff08;讀音 /vju?/, 類似于 view&#xff09; 是一套構建用戶界面的 漸進式框架。與其他重量級框架不同的是&#xff0c;Vue 采用自底向上增量開發的設計。Vue 的核心庫只關注視圖層&#xff0c;并且非常…

鼠標移入視頻播放,鼠標移出播放停止,恢復到原來狀態

<!doctype html> <html lang"en"> <head><meta charset"UTF-8"><title>鼠標移入視頻播放&#xff0c;鼠標移出播放停止&#xff0c;恢復到原來狀態</title><link rel"shortcut icon" href"http://f…

Pycharm常用高效技巧總結

文章目錄1、PyCharm如何自動生成函數注釋2、pycharm運行程序時在Python console窗口中運行3、Pycharm在創建py文件時,如何自動添加文件頭注釋4、Pycharm配置遠程調試5、pycharm同一目錄下無法import明明已經存在的.py文件1、PyCharm如何自動生成函數注釋 一般在函數def()行下敲…

EntityFramework中常用的數據刪除方式

最近在學EF&#xff0c;目前了解到刪除操作有三種方式&#xff0c; 第一&#xff0c;官方推薦的先查詢數據&#xff0c;再根據查詢的對象&#xff0c;刪除對象。 這是第一種&#xff0c;官方推薦 第二&#xff0c;自己創建一個對象&#xff0c;然后附加&#xff0c;然后刪除。 …

Elasticsearch的前后臺運行與停止(tar包方式)

備注&#xff1a;在生產環境中&#xff0c;往往一般用后臺來運行。jps查看。 1、ES的前臺運行 [hadoopdjt002 elasticsearch-2.4.3]$ pwd/usr/local/elasticsearch/elasticsearch-2.4.3[hadoopdjt002 elasticsearch-2.4.3]$ bin/elasticsearch 2、ES的后臺運行 [hadoopdjt002 e…

解決pycharm運行Flask指定ip、端口更改無效

后來查了一下官網文檔&#xff0c;原來Flask 1.0 版本不再支持之前的FLASK_ENV 環境變量了。 Prior to Flask 1.0 the FLASK_ENV environment variable was not supported and you needed to enable debug mode by exporting FLASK_DEBUG1. This can still be used to control…

Freeswitch總結大全

文章目錄1、Freeswitch安裝2、Freeswitch中文文檔3、Freeswitch的event socket event list的中文簡介4、freeswitch之sip協議的注冊、呼叫、掛斷流程5、Freeswitch之mod_cdr_csv6、一款第三方收費的mod_vad&#xff08;看介紹挺不錯的&#xff0c;有做語音交互的童鞋可以看下&a…

Android中SimpleAdapter的使用—自定義列表

本人初學Android&#xff0c;今天研究到Adapter這塊感覺挺有意思的&#xff0c;寫了個自定義列表進行測試 首先我們新建一個layout列表布局文件&#xff0c;具體布局可以自己設定。 下面貼上我的自定義布局文件代碼 1 <?xml version"1.0" encoding"utf-8&qu…

Module 的語法

Module 的語法 概述嚴格模式export 命令import 命令模塊的整體加載export default 命令export 與 import 的復合寫法模塊的繼承跨模塊常量import()概述 歷史上&#xff0c;JavaScript 一直沒有模塊&#xff08;module&#xff09;體系&#xff0c;無法將一個大程序拆分成互相依…

解決:SyntaxError: Non-UTF-8 code starting with '\xe6' in file

pycharm加注釋報錯SyntaxError: Non-UTF-8 code starting with \xe6 in file 處理 代碼最上面加上編碼格式 #coding:utf-8

Freeswitch之ASR(語音識別)總結大全

文章目錄1、使用Pocket Sphinx進行英文語音識別2、PocketSphinx語音識別系統語言模型的訓練和聲學模型的改進3、PocketSphinx語音識別系統的編譯、安裝和使用4、FS之play_and_detect_speech模塊5、一些開源的語音識別軟件6、某大神寫的一系列干貨7、語音識別——基于深度學習的…

linux lvm擴容

linux lvm擴容 LVM磁盤管理 一、LVM簡介... 1 二、 LVM基本術語... 2 三、 安裝LVM... 3 四、 創建和管理LVM... 4 2、 創建PV.. 6 3、 創建VG.. 7 4、 創建LV.. 9 5、LV格式化及掛載... 10 一、LVM簡介 LVM是 Logical Volume Manager(邏輯卷管理)的簡寫&#xff0c;它由Heinz …

Flask唯一URL規則--@app.route('/', endpoint='1')

Flask的URL規則基于werkzeug的路由模塊&#xff0c; 用來保證URL的唯一性。 例如帶斜線&#xff1a; app.route(/example/) def example():return ok如果訪問一個結尾不帶斜線的URL會被重定向到斜線的URL上。 &#xff08;/example&#xff09;變為(/example/) 如果不帶斜線…

智能外呼系統相關資料總結

以下是從零開始搭建智能外呼系統的過程中收集的一些資料&#xff0c;希望對你會有幫助。 1、如何從零開始搭建智能外呼系統 參考&#xff1a;https://blog.csdn.net/pA2elX78qaJTADH/article/details/81351597 2、國內外優秀呼叫中心系統簡介 參考&#xff1a;https://blog…

驅動開發之 設備讀寫方式:緩沖區方式

1. 設備對象一共同擁有三種讀寫方式&#xff1a;緩沖區方式讀寫&#xff08;Buffered方式&#xff09;&#xff1b;直接方式讀寫&#xff08;Direct方式&#xff09;。Neither方式。這三種方式的Flags分別相應DO_BUFFERED_IO,DO_DIRECT_IO,0 在buffered方式中。I/O管理器先創建…

flask開啟調試的四種模式

在app.run()中加一個參數, debugTrue就可以開啟debug模式 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello World!if __name__ __main__:app.run(debugTrue) 將app的debug屬性賦值為True 1 from flask import Flask2 3 app Flas…