由于需要在腳本中添加crontab,因此需要通過腳本來向crontab中添加命令,大致腳本如下。
TMP_CRON=/tmp/tmp_cron
rm -rf $TMP_CRON
#crontab -u root -l
echo `crontab -u root -l` >> $TMP_CRON
if [ `grep -c "rsync.sh" $TMP_CRON` -eq 0 ]; then
cronjob="*/1 * * * * rsync.sh >> /var/log/rsync.log"
echo "$cronjob" >> $TMP_CRON
crontab -u root $TMP_CRON
fi
執(zhí)行完上面的語句之后執(zhí)行crontab -l
發(fā)現(xiàn)已將任務(wù)添加上了悠反,于是就放心沒管,過了一段時(shí)間卻發(fā)現(xiàn)沒有執(zhí)行成功缺狠,很奇怪问慎,但是同樣的,使用crontab -e
手動(dòng)添加的一樣的語句卻執(zhí)行成功了挤茄。于是讓我非橙绲穑苦惱,不知道什么問題穷劈。
查看cron日志
本來想直接查看/var/log
目錄下是否有cron
的日志笼恰,發(fā)現(xiàn)并沒有cron日志踊沸,根據(jù)[2],原來cron的日志需要通過syslog
來管理社证,于是參照[2]進(jìn)行設(shè)定
# 修改rsyslog
sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log #將cron前面的注釋符去掉
# 重啟rsyslog
sudo service rsyslog restart
# 查看crontab日志
less /var/log/cron.log
設(shè)定權(quán)限并重啟cron
查看cron.log
發(fā)現(xiàn)以下一句話
(root) INSECURE MODE (mode 0600 expected) (crontabs/root)
原來這是導(dǎo)致運(yùn)行失敗的原因逼龟,與[3]相似。根據(jù)其說明/var/spool/cron/crontabs/root
的文件權(quán)限應(yīng)該為600追葡,而使用上面的權(quán)限生成的文件權(quán)限是644腺律,因此權(quán)限失敗。
因此在上面腳本中添加以下的語句
chmod 600 /var/spool/cron/crontabs/root
systemctl restart cron
至此宜肉,任務(wù)即可正常的運(yùn)行匀钧,問題解決。