重启后Python Cron定时任务未触发,请求排查建议
排查与解决Cron@reboot任务未执行问题
问题背景
编写的技嘉BIOS版本检查脚本手动执行正常,但配置的@reboot sleep 300 && /usr/local/bin/check_bios.py cron任务未在重启后触发,syslog中无对应执行记录。
排查与解决步骤
1. 确认Crontab条目已正确加载
执行crontab -l(若用root用户配置则加sudo),检查目标任务是否存在。如果未显示,重新执行crontab -e添加条目并保存。
2. 补全Cron执行所需环境变量
Cron的执行环境缺少桌面通知和Python依赖的关键变量,修改crontab条目:
@reboot sleep 300 && export DISPLAY=:0 && export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus && /usr/local/bin/check_bios.py
- 替换
$(id -u)为你的用户UID(可通过id -u命令查看),确保桌面会话的环境变量被正确识别。
3. 添加日志输出定位错误
修改crontab条目,将脚本输出重定向到日志文件,方便排查执行故障:
@reboot sleep 300 && /usr/local/bin/check_bios.py >> /var/log/bios_check.log 2>&1
重启后查看/var/log/bios_check.log,可定位Python模块缺失、网络连接失败等问题。
4. 验证Cron服务状态
执行以下命令确认cron服务正常运行并开机自启:
systemctl status cron
若服务未运行,执行:
systemctl enable --now cron
5. 改用普通用户执行桌面任务
notify-send依赖桌面会话,root用户执行可能无法弹出通知。切换到你的普通用户,执行crontab -e添加任务,避免权限和环境冲突。
6. 替换固定sleep为网络就绪检测
固定300秒延迟无法保证网络完全就绪,改用网络检测逻辑:
@reboot bash -c 'until ping -c1 gigabyte.com >/dev/null 2>&1; do sleep 10; done; sleep 60; /usr/local/bin/check_bios.py'
该命令会等待网络连通后再延迟60秒执行脚本,确保网络可用。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

