Crontab -e 配置的定时任务未执行问题求助
问题描述
我通过
sudo crontab -e配置了定时任务,但所有任务均未按计划执行。我尝试过带sudo和不带sudo的配置(后者应为正确方式,因以root身份运行),手动执行sudo命令时全部可正常运行。配置内容如下:# create SD backup every Wed at 1am: 0 1 * * 3 sudo sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/RaspiSDBack/rpi_$(date +%Y-%m-%d).img # copy SD backup to NAS every 15th at 4-30 am: 30 4 15 * * sudo cp -n -r /media/pi/RaspiSDBack/* /home/pi/QNAP/PI_Backup/ # daily reboot at 4 am: 0 4 * * * sudo /sbin/shutdown -r +5
移除命令中的
sudo:你用sudo crontab -e编辑的是root用户的定时任务,任务本身已经以root权限运行,无需额外添加sudo,多余的sudo可能引发环境变量异常。修改后的任务示例:# create SD backup every Wed at 1am: 0 1 * * 3 sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/RaspiSDBack/rpi_$(date +%Y-%m-%d).img # copy SD backup to NAS every 15th at 4-30 am: 30 4 15 * * cp -n -r /media/pi/RaspiSDBack/* /home/pi/QNAP/PI_Backup/ # daily reboot at 4 am: 0 4 * * * /sbin/shutdown -r +5转义
date命令中的%符号:crontab里%是特殊字符(代表换行),必须用反斜杠转义\%,否则$(date +%Y-%m-%d)无法正确解析。修改备份文件名部分:0 1 * * 3 sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/RaspiSDBack/rpi_$(date +\%Y-\%m-\%d).img检查crontab服务状态:运行
systemctl status cron确认服务是否正常运行,若未启动,执行systemctl start cron启动,再用systemctl enable cron设置开机自启。查看crontab执行日志:运行
grep CRON /var/log/syslog(树莓派默认用syslog),日志会显示任务是否触发、执行时的错误信息(比如路径不存在、权限问题等)。统一使用绝对路径:crontab的PATH环境变量比普通用户更受限,建议脚本和命令都用绝对路径(比如
sh换成/bin/sh,cp换成/bin/cp),避免出现找不到命令的情况。修改后的备份任务:0 1 * * 3 /bin/sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/RaspiSDBack/rpi_$(date +\%Y-\%m-\%d).img验证挂载点状态:如果
/media/pi/RaspiSDBack和/home/pi/QNAP/PI_Backup是挂载点,要确保crontab执行时这些挂载点已正常挂载。可以在脚本开头添加挂载检查,或者把挂载命令提前放到crontab任务中。
内容的提问来源于stack exchange,提问作者Althir

