Crontab介紹:
Linux crontab是用來crontab命令常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於「crontab」文件中,以供之後讀取和執行。該詞來源於希臘語 chronos(χρ?νο?),原意是時間。通常,crontab儲存的指令被守護進程激活, crond常常在後台運行,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱為cron jobs。當安裝完成操作系統之後,默認便會啟動此任務調度命令。crond 命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
注意:新創建的 cron 任務,不會馬上執行,至少要過 2 分鐘后才可以,當然你可以重啟 cron 來馬上執行。
1.使用yum命令安裝Crontab:
代碼語言:javascript代碼運行次數:0運行複製yum install vixie-cron yum install crontabs註:vixie-cron軟體包是cron的主程序;crontabs軟體包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。cron是linux的內置服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:/sbin/service crond start #啟動服務/sbin/service crond stop #關閉服務/sbin/service crond restart #重啟服務/sbin/service crond reload #重新載入配置2.查看Crontab狀態:
代碼語言:javascript代碼運行次數:0運行複製service crond statusntsysv #查看crontab服務是否已設置為開機啟動chkconfig –level 35 crond on #加入開機自動啟動3.添加定時任務:
代碼語言:javascript代碼運行次數:0運行複製crontab -e #編輯cron任務模式i #默認文字編輯器為vim,按i字母鍵即可添加cron任務30 3 * * * /usr/local/etc/rc.d/lighttpd restart #將命令代碼放入,此命令意義為每天的03:30 重啟apacheESC #按ESC鍵退出編輯模式:wq #鍵入:wq保存service crond restart #重啟crontab服務4.查看任務列表:
代碼語言:javascript代碼運行次數:0運行複製crontab -l5.Crontab相關命令:
代碼語言:javascript代碼運行次數:0運行複製(1)語法:crontab [-u ][配置文件] 或 crontab { -l | -r | -e }-u # 是指設定指定的定時任務,這個前提是你必須要有其許可權(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設定自己的定時任務。-l #列出該用戶的定時任務設置。-r #刪除該用戶的定時任務設置。-e #編輯該用戶的定時任務設置。(2)命令時間格式 :* * * * *command分 時 日 月 周 命令第1列表示分鐘1~59 每分鐘用*或者 */1表示第2列表示小時1~23(0表示0點)第3列表示日期1~31第4列表示月份1~12第5列標識號星期0~6(0表示星期天)第6列要運行的命令(3)一些Crontab定時任務例子:30 21 * * * /usr/local/etc/rc.d/lighttpd restart #每晚的21:30 重啟apache45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart #每月1、10、22日的4 : 45重啟apache10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart #每周六、周日的1 : 10重啟apache0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart #每天18 : 00至23 : 00之間每隔30分鐘重啟apache0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart #每星期六的11 : 00 pm重啟apache* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart #晚上11點到早上7點之間,每隔一小時重啟apache* */1 * * * /usr/local/etc/rc.d/lighttpd restart #每一小時重啟apache0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart #每月的4號與每周一到周三的11點重啟apache0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart #一月一號的4點重啟apache*/30 * * * * /usr/sbin/ntpdate cn.pool.ntp.org #每半小時同步一下時間0 */2 * * * /sbin/service httpd restart #每兩個小時重啟一次apache 50 7 * * * /sbin/service sshd start #每天7:50開啟ssh服務 50 22 * * * /sbin/service sshd stop #每天22:50關閉ssh服務 0 0 1,15 * * fsck /home #每月1號和15號檢查/home 磁碟 1 * * * * /home/bruce/backup #每小時的第一分執行 /home/bruce/backup這個文件 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; #每周一至周五3點鐘,在目錄/home中,查找文件名為*.xxx的文件,並刪除4天前的文件。30 6 */10 * * ls #每月的1、11、21、31日是的6:30執行一次ls命令End...6.部分腳本無法執行問題:
如果我們使用 crontab 來定時執行腳本,無法執行,但是如果直接通過命令(如:./test.sh)又可以正常執行,這主要是因為無法讀取環境變數的原因。
解決方法:
(1)所有命令需要寫成絕對路徑形式,如: /usr/local/bin/docker。
(2)在 shell 腳本開頭使用以下代碼:
代碼語言:javascript代碼運行次數:0運行複製#!/bin/sh. /etc/profile. ~/.bash_profile(3)在 /etc/crontab 中添加環境變數,在可執行命令之前添加命令 . /etc/profile;/bin/sh,使得環境變數生效,例如:
代碼語言:javascript代碼運行次數:0運行複製20 03 * * * . /etc/profile;/bin/sh /var/www/wwwroot/test.sh7.Crontab默認調度任務:
cron默認配置了調度任務,分別為:hourly、daily、weekly、mouthly,默認配置文件為/etc/anacrontab
將需要執行的腳本放到相應的目錄下即可,目錄分別為:
代碼語言:javascript代碼運行次數:0運行複製/etc/cron.hourly/etc/cron.daily/etc/cron.weekly/ect/cron.mouthly8.注意清理系統用戶的郵件日誌:
每條任務調度執行完畢,系統都會將任務輸出信息通過電子郵件的形式發送給當前系統用戶,這樣日積月累,日誌信息會非常大,可能會影響系統的正常運行,因此,將每條任務進行重定向處理非常重要。
例如,可以在crontab文件中設置如下形式,忽略日誌輸出:
代碼語言:javascript代碼運行次數:0運行複製0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1「/dev/null 2>&1」表示先將標準輸出重定向到/dev/null,然後將標準錯誤重定向到標準輸出,由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null,這樣日誌輸出問題就解決了。
9.Crontab日誌路徑:
代碼語言:javascript代碼運行次數:0運行複製ll /var/log/cron* #/var/log/cron只會記錄是否執行了某些計劃的腳本,但是具體執行是否正確以及腳本執行過程中的一些信息則linux會每次都發郵件到該用戶下。10.Crontab命令在線驗證工具:
https://tool.lu/crontab