cron服務是Linux的內置服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:
/sbin/service crond start//沒打開的話首先要打開。 /sbin/service crond stop /sbin/service crond restart /sbin/service crond reload
以上1-4行分別為啟動、停止、重啟服務和重新加載配置。
要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可
查看當前用戶的crontab,輸入 crontab -l;
編輯crontab,輸入 crontab -e;
刪除crontab,輸入 crontab -r
添加任務
查詢任務是否加了:
crontab -l -u root #查看root用戶 0 */1 * * * command 0 */2 * * * command
基本格式 :
* * * * * command
分 時 日 月 周 命令
第1列表示分鍾1~59 每分鍾用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令
crontab文件的一些例子(博主會在此處不定時增加例子):
- 每10分鍾執行一個shell腳本。
*/10 * * * * /home/tmp/clear.sh
*/10表示每10分鍾執行。
但是,有一個問題,就是,如果你想通過定時任務來調用執行***.php,那么,就可以這么寫。
*/10 * * * * /usr/local/php/bin/php /home/shells/clearOutOfDate.php
上面這句話是可以定時運行的。我測試過。如果不行,請使用chmod 744 ***.php修改你的文件可執行權限(rwx的x一定要有,如果是root用戶的話)。不行的話,可以提升權限至777再試試
我想說的問題是:如果你把
/usr/local/php/bin/php /home/shells/clearOutOfDate.php
這句話放在shell腳本里面,比如這樣,

我自己也調了很久,但是這句話就是不會被執行。echo "你好啊"這句話是可以輸出。找不到問題在哪里。所以建議大家在crontab定時執行php文件的時候,直接在
crontab -e 里面寫
*/1 * * * * /usr/local/php/bin/php /home/shells/clearOutOfDate.php
就好了。另外注意 php /home/shells/clearOutOfDate.php是不能執行的。對於php的可執行文件要寫全絕對路徑。一般都會在/usr/local/php/bin/php目錄下,可以找一找。
-
(2018-1-11日更)定時每個月處理一下日志文件。可以先看我的bash 命令:
#!/bin/bash cp success.log success/$(date +%Y-%m-%d).log cp error.log error/$(date +%Y-%m-%d).log cp login.log login/$(date +%Y-%m-%d).log echo "---------------------------" > success.log echo "---------------------------" > error.log echo "---------------------------" > login.log
應用會產生日志對吧?但是我們一年下來總把日志追加在一個文件的話,文件越來越大。每次定時讀寫也是非常耗費內存的。所以,我們需要針對日志文件的積累情況,定一個合理的時間,把日志的內容取出來,按照日期歸類。例如圖中:
$(date +%Y-%m-%d)就是按照年月日來把log文件歸類。下面設置定時執行,因為我的日志產生的不是很多。每個月最多也就1M多一點。所以,我設置一下,每10天,歸檔一次log文件。這樣可以減小后期追加log的IO消耗。命令如下:
* 3 1,15 * * /data/wwwroot/project1/wx/logs/copy.sh
表示每個月的1號和15號的凌晨3點會執行一次。
- (2018-1-11日更)crontab無法做到秒級執行,最小的粒度是分鍾。不過可以變相實現秒級定時任務。
* * * * * "命令"
上面的全星號,可以實現每分鍾運行。
* * * * * "命令" * * * * * sleep 20; "命令" * * * * * sleep 40; "命令"
上面的三行 可以做到每20秒執行。也可以寫一個循環腳本,在腳本內進行sleep騷操作。
定時任務不會執行的問題總結:
1 crond服務未啟動
crontab不是Linux內核的功能,而是依賴一個crond服務,這個服務可以啟動當然也可以停止。如果停止了就無法執行任何定時任務了,解決的方法是打開它:
crond
或
service crond start
如果提示crond命令不存在,可能被誤刪除了,CentOS下可以通過這個命令重新安裝:
yum -y install crontabs
2 權限問題
比如:腳本沒有x執行權限,解決方法:
增加執行權限,或者用bash abc.sh的方法執行
3 路徑問題
有的命令在shell中執行正常,但是在crontab執行卻總是失敗。有可能是因為crontab使用的sh未正確識別路徑,比如:以root身份登錄shell后執行一個/root/test.sh,只要執行
./test.sh
就可以了。但是在crontab中,就會找不到這個腳本,比如寫完整:
/root/test.sh
4 時差問題
因為服務器與客戶端時差問題,所以crontab的時間以服務器時間為准。
5 變量問題
有時候命令中含有變量,但crontab執行時卻沒有,也會造成執行失敗。
