Crontab中定时重启与重启后执行脚本的配置故障排查求助
Crontab中定时重启与重启后执行脚本的配置故障排查求助
你好呀!看了你的问题,马上发现了几个关键问题,咱们一步步来解决~
核心问题分析
@reboot语法错误
@reboot是crontab的特殊关键字,专门用来指定「系统重启后执行」的任务,它不需要前面的时间字段(比如你写的46 17 * * *)。把时间字段和@reboot混在一起写,crontab根本识别不了这个任务,这就是重启后脚本没运行的核心原因!脚本执行逻辑漏洞
你实际命令里的&& sudo su -c "cd /Old-LibDrive-Main" && nohup python3 main.py &存在逻辑问题:sudo su -c "cd /Old-LibDrive-Main"只是在临时的子shell里切换到root并执行cd命令,这个目录切换不会影响后续的命令,后面的nohup python3 main.py &还是在原来的工作目录执行,自然找不到main.py文件。
正确的配置方案
直接用下面的crontab配置替换你的原有内容:
# 定时重启任务(每天17:03执行) 3 17 * * * sudo shutdown -r now # 重启后执行脚本的任务(注意没有前面的时间字段) @reboot sleep 10 && sudo su -c "cd /Old-LibDrive-Main && nohup python3 main.py > /var/log/my_script.log 2>&1 &"
配置细节说明
- 重启任务里加上
now,让shutdown立即执行,避免不必要的等待; - @reboot单独作为定时字段,明确告诉crontab这是重启触发的任务;
- 把
cd和nohup命令放在同一个sudo su -c的引号内,确保cd后的工作目录对后续脚本生效; - 加上
> /var/log/my_script.log 2>&1,把脚本的输出和错误信息都写入日志文件,方便后续排查问题。
简化版可选方案
如果你的用户本身拥有sudo权限,其实可以不用切换到root身份,直接用绝对路径执行脚本,配置更简洁:
3 17 * * * sudo shutdown -r now @reboot sleep 10 && sudo nohup python3 /Old-LibDrive-Main/main.py > /var/log/my_script.log 2>&1 &
另外记得确认:/Old-LibDrive-Main目录存在,main.py文件有可读权限(如果需要执行权限,可运行chmod +x main.py)。
备注:内容来源于stack exchange,提问作者Aung Myo
相关产品推荐
相关产品推荐

