咨询在现有crontab中新增Python脚本定时任务的可行性
先直接给结论:你要添加的那行crontab命令语法上完全没问题,但实际执行能不能顺利跑起来,还得确认几个关键点,我给你拆解一下:
先看懂你这行命令的执行逻辑
crontab的格式是 分 时 日 月 周 用户 命令,你写的这行:
* * 1 * * pi /usr/bin/python /home/pi/Sensors_Database/checkDB.py
意思是:每个月的1号,全天每分钟执行一次checkDB.py脚本,执行用户是pi。如果这正是你想要的执行频率,那格式上没毛病。
必须检查的几个坑
脚本权限问题
确保pi用户能读、能执行这个脚本,跑个命令看看:ls -l /home/pi/Sensors_Database/checkDB.py只要权限里有
r(读)和x(执行)就行,比如-rwxr-xr-x或者-rw-r--r--(后者的话只要你指定了python解释器,读权限足够)。如果权限不够,用chmod +rx /home/pi/Sensors_Database/checkDB.py调整。Python解释器路径是否正确
你写的/usr/bin/python可能不是pi用户实际用的Python版本——很多树莓派系统里python指向Python2,而你的脚本大概率是Python3写的。切换到pi用户,跑which python或者which python3确认路径,比如如果是Python3,把命令里的/usr/bin/python改成/usr/bin/python3更稳妥。脚本里的路径是否都是绝对路径
crontab执行脚本时,工作目录是pi的家目录(/home/pi),如果checkDB.py里用了相对路径(比如./data.txt),那它会去/home/pi下找这个文件,而不是脚本所在的Sensors_Database目录。所以务必把脚本里所有文件路径都改成绝对路径,比如/home/pi/Sensors_Database/data.txt。加个日志方便排查问题
crontab默认不会把执行的输出或错误通知你,建议把命令改成这样:* * 1 * * pi /usr/bin/python /home/pi/Sensors_Database/checkDB.py >> /home/pi/checkDB_cron.log 2>&1这样所有执行日志和错误都会写到
checkDB_cron.log里,出问题了直接看这个文件就行。
小技巧:先测试再正式用
如果你不想等一个月才知道脚本能不能跑,可以先把时间字段改成*/5 * * * *(每5分钟执行一次),测试没问题后再改回每月1号的配置,省得浪费时间。
最后,编辑crontab记得用crontab -e命令,不要直接手动编辑crontab文件,保存退出后cron会自动加载新配置,不用重启服务。
内容的提问来源于stack exchange,提问作者user5030683

