树莓派crontab配置@reboot执行Python Telegram Bot脚本无效求助
故障解决方案
环境变量问题
crontab运行时的环境变量和手动登录shell的环境变量不一致,直接写python可能找不到对应解释器,或者调用的Python版本和手动运行的版本不同(比如手动用的是Python3,crontab调用的是Python2,缺少相关依赖)。
解决方法:先执行which python3获取Python的绝对路径(比如返回结果为/usr/bin/python3),将crontab配置中的python替换为完整绝对路径。工作目录问题
如果脚本中使用了相对路径读取配置、写入临时文件等内容,crontab默认的工作目录不是脚本存放目录,会导致路径读取失败。
解决方法:在执行脚本前先切换到脚本所在目录,crontab配置修改为:@reboot cd /home/pi && /usr/bin/python3 myscript.py网络未就绪问题
树莓派开机后网络连接初始化晚于crontab的@reboot任务执行时间,脚本运行时还未联网,自然无法调用Telegram API发送消息。
解决方法:在执行脚本前添加延迟等待网络就绪,比如等待30秒再运行,crontab配置修改为:@reboot sleep 30 && cd /home/pi && /usr/bin/python3 myscript.py
可根据自身网络连接速度调整延迟时间。权限问题
如果是用sudo crontab -e修改的root用户定时任务,而手动运行是用pi用户执行,可能会出现root用户缺少对应Python依赖、无法读取pi用户目录下配置文件等权限问题。
解决方法:切换到平时运行脚本的用户,执行crontab -e编辑当前用户的定时任务,不要加sudo。添加日志排查
如果以上方法都无法解决,可以在crontab配置中添加日志输出,查看具体报错原因:@reboot sleep 30 && cd /home/pi && /usr/bin/python3 myscript.py >> /home/pi/bot_run.log 2>&1
重启后查看/home/pi/bot_run.log文件内容,即可定位具体报错原因。补充:如果需要脚本长期稳定后台运行,建议配置systemd服务,可以设置开机自启、运行失败自动重启,比crontab的
@reboot更适合常驻进程场景。
内容的提问来源于stack exchange,提问作者Boröom

