前言
Linux crontab是用來定期執行程序的命令。
crond 命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
linux 任務調度的工作主要分為以下兩類:
系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存
個人執行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件伺服器是否有新信,這些工作可由每個用戶自行設置
crond 服務安裝crontab 語法語法1:crontab [ -u user ] file
語法2:crontab [ -u user ] { -l | -r | -e }
說明:
參數說明:
crontab命令格式:minutes hours day month weeks command
其中minutes 表示分鐘,hours 表示小時,day 表示一個月份中的第幾天,month 表示月份,weeks表示一個星期中的第幾天。command表示要執行的程序命令。
當 minutes 為 * 表示每分鐘都要執行 command,hours 為 * 表示每小時都要執行程序命令,其餘類推
當 minutes 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,hours 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
當minutes 為 */n 時表示每 n 分鐘個時間間隔執行一次,hours 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
當 minutes為 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,hours 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
* * * * *
- - - - -
| | | | |
| | | | + 星期中星期幾 (0 - 6) (星期天 為0)
| | | + 月份 (1 - 12)
| | + 一個月中的第幾天 (1 - 31)
| + 小時 (0 - 23)
+ 分鐘 (0 - 59)
實例* * * * * echo "hello word" >> test.txt0 6-12/3 * 12 * /usr/local/bin/bak.sh0 17 * * 1-5 mail -s "hello world!" test@domain.name < /tmp/maildata20 0-23/2 * * * echo "haha"
常見問題# 所有命令需要寫成絕對路徑形式,如:
/usr/local/bin/docker
# 在 shell 腳本開頭使用以下代碼:
#!/bin/sh
. /etc/profile
. ~/.bash_profile
# 或者在 /etc/crontab 中添加環境變量,在可執行命令之前添加命令 . /etc/profile;/bin/sh,使得環境變量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh
結語