2019年第 85 篇文章,總第 109 篇文章
本文大約2000字,閱讀大約需要6分鐘
crontab
可以在指定的時間執行一個shell腳本以及執行一系列 Linux 命令。
定時執行shell 腳本
簡單給出執行 shell 腳本的步驟。
首先是編寫一個測試腳本--
test.sh
# 創建腳本
$ vim test.sh
# 在腳本中做寫入文件操作
date >> data.txt
修改腳本的權限,確保腳本有執行的權限
chmod 777 test.sh
設置 crontab 定時任務
# 打開定時任務配置文件
crontab -e
# 在配置文件中寫入定時任務的操作, 這裏就是指定每天12點定時執行腳本,並把執行腳本的日誌寫入文件 test.log
0 12 * * * sh test.sh > test.log
保存退出,也就是
:wq
如果有錯,linux 會在執行的時候發送一份郵件給你
cat /var/spool/mail/root
注意:
crontab 是運行在系統默認環境裏,如果運行的腳本是執行 python 代碼,即腳本的內容可能是:
python test.py
這裏的 python
會是系統默認的 python 版本,而如果你是運行在 conda 環境裏,那麼這裏就需要採用當前環境裏 python 版本的執行文件的絕對路徑,即先用以下命令查找當前 python 版本的執行文件位置:
$ which python
# 假設輸出的文件位置爲:
/root/anaconda3/py3/bin/python
這裏輸出的路徑,直接替換腳本里的 python
:
/root/anaconda3/py3/bin/python test.py
這樣才能保證運行不出錯,否則可能因爲版本問題出錯;
crontab命令詳解
常用命令
crontab –e //修改 crontab 文件,如果文件不存在會自動創建。
crontab –l //顯示 crontab 文件。
crontab -r //刪除 crontab 文件。
crontab -ir //刪除 crontab 文件前提醒用戶。
service crond status //查看crontab服務狀態
service crond start //啓動服務
service crond stop //關閉服務
service crond restart //重啓服務
service crond reload //重新載入配置
所以如果需要取消某個定時任務,就是可以刪除在配置文件中的對應命令,即 crontab -e
打開文件,然後刪除對應哪行的命令即可
基本格式
* * * * * command
分 時 日 月 周 命令
第1列表示分鐘 00~59 每分鐘用*
或者 */1
表示
第2列表示小時 00~23(0表示0點)
第3列表示日期 01~31
第4列表示月份 01~12
第5列標識號星期 0~6(0表示星期天)
第6列要運行的命令
此外每一列除了數字,還可以有這些符號,其含義如下所示:
* 代表任何時間,比如第一個 * 就代表一小時中的每分鐘都執行
, 代表不連續的時間,比如 0 8,12,16 * * * 代表每天8,12,16點0分執行
- 代表連續的時間範圍,比如0 5 * * 1-6 代表在週一到週六凌晨5點0分執行
*/n 代表每個多久執行一次,比如*/10 * * * *代表每隔10分鐘執行一次
示例
1、在 凌晨00:10運行
10 0 * * * sh test.sh
2、每個工作日23:59都進行備份作業。
59 23 * * 1,2,3,4,5 sh test.sh
或者
59 23 * * 1-5 sh test.sh
3、每分鐘運行一次命令
*/1 * * * * sh test.sh
4、每個月的1號 14:10 運行
10 14 1 * * sh test.sh
5、每10分鐘定時請求一個地址
0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php
注意,一般最好不要同時採用幾號和每週幾,可能會出現混淆;
正確、錯誤日誌的輸出是否寫入到文件方法
1.不輸出任何內容(建議使用方法一)
*/1 * * * * /root/XXXX.sh >/dev/null 2>&1
或
*/1 * * * * /root/XXXX.sh &>/dev/null //&表示任何內容
2.將正確和錯誤日誌都輸出到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1
3.只輸出正確日誌到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log
或
*/1 * * * * /root/XXXX.sh 1> /tmp/load.log //1可以省略
4.只輸出錯誤日誌到 /tmp/load.log
*/1 * * * * /root/XXXX.sh 2> /tmp/load.log
部分解釋:
/dev/null 代表空設備文件
> 代表重定向到哪裏
1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null"
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
參考文章:
Linux 定時執行shell腳本命令之crontab:https://www.cnblogs.com/wenzheshen/p/8432588.html
linux定時執行sh文件:https://blog.csdn.net/IT_xiaocao/article/details/78206364
歡迎關注我的微信公衆號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!
如果覺得不錯,在看、轉發就是對小編的一個支持!