1. 程式人生 > 其它 >linux定時執行任務 contrab

linux定時執行任務 contrab

1.cron介紹

我們經常使用的是crontab命令是cron table的簡寫,它是cron的配置檔案,也可以叫它作業列表,我們可以在以下資料夾內找到相關配置檔案。

  • /var/spool/cron/ 目錄下存放的是每個使用者包括root的crontab任務,每個任務以建立者的名字命名
  • /etc/crontab 這個檔案負責排程各種管理和維護任務。
  • /etc/cron.d/ 這個目錄用來存放任何要執行的crontab檔案或指令碼。
  • 我們還可以把指令碼放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。
crontab [-u username]    //省略使用者表表示操作當前使用者的crontab
      -e      (編輯工作表新增要執行命令 格式:時間規則 + 執行命令)
      -l      (列出工作表裡的命令)
      -r      (刪除工作作)

2.服務啟動/關閉和檢視,使用crond關鍵詞

systemctl status crond  #檢視crontab服務狀態

systemctl start crond  #啟動服務

systemctl stop crond  #停止定時器服務

systemctl reload crond #重新載入配置 

tail -f /var/log/cron #檢視定時任務的執行日誌;

 

3.時間格式引數有5位,分表表示:

分鐘0-59,小時0-23,日1-31,月1-12,星期0-6

 

 

除了數字,還有一些特殊字元格式:

* 表示所在位置的每個整數,比如第一位使用*,表示每分鐘執行一次

, 同一個位置用逗號隔開多個數字,表示設定多個時間執行,比如分鐘1,30表示1分鐘和30分鐘的時候都會執行

- 表示範圍,範圍內的每個數值都會執行,如分鐘1-10,表示從第一分鐘到10分鐘,每分鐘都執行一次

/ 表示頻率,如分設定1-30/3,表示1到30之間,每3分鐘執行一次,也可以配合*設定,*/5表示每5分鐘執行一次。

舉例:

例項1:每1分鐘執行一次command
命令:
* * * * * mycommand

例項2:每小時的第3和第15分鐘執行
命令:
3,15 * * * * mycommand

例項3:在上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 * * * mycommand

例項4:每隔兩天的上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 */2 * * mycommand

例項5:每個星期一的上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 * * 1 mycommand

例項6:每晚的21:30重啟smb 
命令:
30 21 * * * /etc/init.d/smb restart


例項7:每月1、10、22日的4 : 45重啟smb 
命令:
45 4 1,10,22 * * /etc/init.d/smb restart


例項8:每週六、週日的1 : 10重啟smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart


例項9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb 
命令:
0,30 18-23 * * * /etc/init.d/smb restart


例項10:每星期六的晚上11 : 00 pm重啟smb 
命令:
0 23 * * 6 /etc/init.d/smb restart


例項11:每一小時重啟smb 
命令:
* */1 * * * /etc/init.d/smb restart


例項12:晚上11點到早上7點之間,每隔一小時重啟smb 
命令:
* 23-7/1 * * * /etc/init.d/smb restart

例項13:每月的4號與每週一到週三的11點重啟smb 
命令:
0 11 4 * mon-wed /etc/init.d/smb restart

例項14:一月一號的4點重啟smb 
命令:
0 4 1 jan * /etc/init.d/smb restart


例項15:每小時執行/etc/cron.hourly目錄內的指令碼
命令:
01 * * * * root run-parts /etc/cron.hourly
說明:
run-parts這個引數了,如果去掉這個引數的話,後面就可以寫要執行的某個指令碼名,而不是目錄名了

 

4、Crontab可能存在的問題

4.1 Crontab不立即生效

大家新建的Crontab定時任務儲存後需要等待2分鐘後才會執行,當然如果想要立即執行可以重啟Crontab。當crontab失效時,可以嘗試/etc/init.d/crond restart解決問題,或者檢視日誌看某個任務有沒有執行/報錯tail -f /var/log/cron。

4.2 Crontab不執行

指令碼中涉及檔案路徑時寫全域性路徑,更新系統時間時區後需要重啟cron。當手動執行指令碼OK,但是crontab死活不執行時很有可能是環境變數,可嘗試在crontab中直接引入環境變數解決問題,例如:

0 * * * * . /etc/profile;/bin/sh /root/backup.sh

4.3 Crontab無許可權執行

要注意系統級任務排程與使用者級任務排程。只有 root 使用者和 crontab 檔案的所有者可以在 -e 、-l、-r 和 -v 標誌後面使用 UserName 以編輯、列出、除去或驗證指定使用者的 crontab 檔案。

root使用者的任務排程操作可以通過”crontab –uroot –e”來設定,也可以將排程任務直接寫入/etc/crontab檔案。

想編輯別的使用者的 crontab, 使用root執行下面的命令,同一個格式 (追加 “-u username” 到命令後) 也可以用來列出或刪除 crontabs。

crontab -u username -e

4.4 Crontab執行後通知

當Crontab定時任務在你所指定的時間執行後,系統會寄一封信給你,顯示該程式執行的內容,可以在日誌中/var/log/cron看到。若是你不希望收到這樣的通知,請在每一行空一格之後加上 > /dev/null 2>&1 即可。

轉載自:https://baijiahao.baidu.com/s?id=1724174352244358565&wfr=spider&for=pc