我有一个 cron 作业,应该每天凌晨 2 点触发 shell 脚本。
0 2 * * * /root/bin/script.sh
然而它根本不起作用。我缺少什么?
更多详细信息:手动运行时,脚本无需 cron 调度即可正常运行,并执行其应执行的操作。 root 用户正在运行 cron 作业。 cron 作业是由用户安排crontab -e
的root
。pgrep cron
给出一个服务 ID,这意味着 cron 服务正在运行。以下是文件内容/root/bin/script.sh
:
BACKUP_LOG=/var/log/backup.log
exec 1> >(while IFS= read -r line; do echo "$(date --rfc-3339 ns) $line"; done | tee -a ${BACKUP_LOG}) 2>&1
# Back up the etc directory
mkdir /home/directory1/backup/etc_backup
cp -Lrp /etc /home/data/backup/etc_backup
tar czf /home/data/backup/etc_backup.tgz
/home/data/backup/etc_backup
rm -rf /home/data/backup/etc_backup
实际上我将脚本从/etc/cron.daily/
移至/root/bin
.该脚本是否应该/etc/cron.daily
仅用于日常执行?
答案1
我的猜测是 shell 无法正确理解您的脚本,因为它没有任何正确的 shebang。尝试使用crontab -e
这个来代替:
0 2 * * * bash /root/bin/script.sh > /tmp/crontest.log 2>&1
通过使用 bash 直接调用脚本,脚本现在应该可以正常运行。任何输出最终都应该被记录下来/tmp/crontest.log
,如果它仍然不起作用,这可能会对调试有所帮助。