Linux 定時執行shell 腳本

2019年第 85 篇文章,總第 109 篇文章

本文大約2000字,閱讀大約需要6分鐘

crontab 可以在指定的時間執行一個shell腳本以及執行一系列 Linux 命令。

定時執行shell 腳本

簡單給出執行 shell 腳本的步驟。

  1. 首先是編寫一個測試腳本--test.sh

# 創建腳本
$ vim test.sh
# 在腳本中做寫入文件操作
date >> data.txt
  1. 修改腳本的權限,確保腳本有執行的權限

chmod 777 test.sh
  1. 設置 crontab 定時任務

# 打開定時任務配置文件
crontab -e
# 在配置文件中寫入定時任務的操作, 這裏就是指定每天12點定時執行腳本,並把執行腳本的日誌寫入文件 test.log
0 12 * * * sh test.sh > test.log
  1. 保存退出,也就是 :wq

  2. 如果有錯,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


歡迎關注我的微信公衆號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!

如果覺得不錯,在看、轉發就是對小編的一個支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章