今天用crontab去自動執行一個任務(shell腳本),任務在命令行模式下執行很是正確,可是當crontab調度任務時,任務卻沒法正常執行。具體表現爲:找不到變量;任務在同一時刻被執行屢次。shell
解決辦法bash
1:crontab自動執行腳本時,沒法帶入shell的環境變量,須要在腳本文件中引用 /etc/profile和/$HOME/bash_profile腳本。spa
#!/bin/bash . /etc/profile . /$HOME/.bash_profile echo "hello world" > tmpfile rm tmpfile
2:crontab執行出錯時,能夠再 /var/spool/mail/root(當前用戶名)下看郵件信息,同時也能夠在 /var/log/cron中查看信息。命令行
cat /var/spool/mail/root | tail -n 100 cat /var/log/cron | tail -n 100
當發如今同一時刻,crontab所調度的任務被執行屢次或者有多個error信息時,能夠斷定在該時刻crontab任務被執行了屢次,這時應查看系統進程信息,看是否有多個cron服務在運行,以下:code
ps -aux | grep cron
若是有多個cron進程,kill掉全部的,重啓crond,以下:進程
killall cron crond
3:crontab執行任務時,不會進入到任務所在的目錄執行任務,而是在當前用戶的$HOMRE目錄下執行的。所以當任務中有涉及到目錄處理時,應儘可能使用絕對路徑。若是使用了相對路徑,在crontab命令設置時候應先用cd命令進入到目錄,而後在執行任務,crontab -e 打開配置文件後,配置以下:crontab
*/10 * * * * cd /home/work/testCron && ./testCron.sh
4:crontab配置文件格式爲class
分(0-59) 小時(0-23 ) 天(1-31) 月(1-12) 星期(0-6:0爲週末) 命令test
該六部分之間用空格隔開;具體格式可查看 /etc/crontab變量
cat /etc/crontab