系统是centos,发现crontab定时任务不执行
登录系统用手工执行脚本就可以
其它如crontab配置文件没有对用户做限制,
脚本权限也赋予执行,用root账户执行,但是最后还是不行,
请各位大神指点一下,下面是Log和脚本内容
Feb 7 14:10:01 1280859075761a8Z crond[12517]: (root) CMD (/usr/lib/sa/sa1 1 1)
Feb 7 14:20:01 1280859075761a8Z crond[12813]: (root) CMD (/usr/lib/sa/sa1 1 1)
Feb 7 14:30:01 1280859075761a8Z crond[13115]: (root) CMD (/usr/lib/sa/sa1 1 1)
Feb 7 14:40:01 1280859075761a8Z crond[13471]: (root) CMD (/usr/lib/sa/sa1 1 1)
Feb 7 14:41:02 1280859075761a8Z crontab[13510]: (root) BEGIN EDIT (root)
Feb 7 14:41:47 1280859075761a8Z crontab[13510]: (root) END EDIT (root)
Feb 7 14:41:51 1280859075761a8Z crontab[13534]: (root) BEGIN EDIT (root)
Feb 7 14:42:24 1280859075761a8Z crontab[13534]: (root) REPLACE (root)
Feb 7 14:42:24 1280859075761a8Z crontab[13534]: (root) END EDIT (root)
Feb 7 14:42:40 1280859075761a8Z crontab[13564]: (root) LIST (root)
Feb 7 14:43:01 1280859075761a8Z crond[18021]: (root) RELOAD (cron/root)
Feb 7 14:45:01 1280859075761a8Z crond[13638]: (root) CMD (/backuptoqiniu/backuptoqiniu.sh )
Feb 7 14:50:01 AY1311280859075761a8Z crond[13791]: (root) CMD (/usr/lib/sa/sa1 1 1)
Feb 7 15:00:01 AY1311280859075761a8Z crond[14091]: (root) CMD (/usr/lib/sa/sa1 1 1)
Feb 7 15:01:01 AY1311280859075761a8Z crond[14120]: (root) CMD (run-parts /etc/cron.hourly)
shell code
#!/bin/bash
BACKUP_SRC="/home/wwwroot/tes"
MYSQL_SERVER="127.0.0.1"
MYSQL_USER="test"
MYSQL_PASS="tset"
DATEBASE="tee"
HOST="544"
NOW=$(date +"%Y-%m-%d-%H")
echo "start dump mysql"
ases.sql" -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS $DATEBASE > "$NOW-Databecho "dump ok"
echo "start tar"
tar -cPzf $HOST-$NOW-backup.tar.gz $NOW-Databases.sql "$BACKUP_SRC"
echo "tar ok"
python /root/backuptoqiniu/upload.py
rm -f $NOW-Databases.sql $HOST-$NOW-backup.tar.gz
echo "ALL ok"
crontab command
45 14 * * * /backuptoqiniu/backuptoqiniu.sh
問題解決思路:
1. 判斷crontab是否有執行過,你可以添加一個每分鐘執行的寫文件的小腳本進行測試,如果有記錄說明crontab本身服務沒有問題.
如:
Feb 7 14:45:01 1280859075761a8Z crond[13638]: (root) CMD (/backuptoqiniu/backuptoqiniu.sh )
這裡面應該是表示crontab已經成功執行了的,所以crontab服務沒有問題.2. 其實有經驗多半就會知道crontab的執行是沒有相關環境變數的,解決辦法就是在腳本中打日誌,另外默認將所有的命令採用全路徑的方式.
偵錯方法:新增日誌檔,將原來所有的echo 全部可以嘗試追加到日誌檔,或者在crontab寫的時候追加日誌.
45 14 * * * /backuptoqiniu/backuptoqiniu.sh >> /tmp/out.log 2>&1
ases.sql" -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS $DATEBASE > "$NOW-Datab
我就沒有看懂你這個是什麼,是不是自己的命令不在預設的系統指令裡面.
測試方法: 測試crontab的PATH與手動執行的PATH不一樣.
樓上已經給了詳細的排查過程,一般計畫任務的問題大部分是出在環境變數上面,
要嘛就寫絕對路徑,要嘛就在腳本的開頭載入/etc/profile
在crontab裡的上面加上
MAILTO=""
[root@mimvp-bj script]# service crond status
crond is stopped
[root@mimvp-bj script]# service crond start
Starting crond: [ OK ]
[ @mimvp-bj script]# service crond status
crond (pid 24577) is running…
看看你的crontab打開了沒
補充一種情況
若修改了系統時間 由
UTC
-->CST
需要重啟
crontab
服務否則
crontab
還是使用的是UTC時間 於是若指定了具體的小時的話 就不會執行了