使用Cron运行需sudo的Python脚本probemon.py失败,求解决方案
解决Cron运行需sudo的Python脚本失败的问题
我之前也碰到过类似的 cron 执行权限和路径相关的坑,给你几个实用的排查和解决思路:
先核对路径与Python环境
cron 的环境变量和你登录终端时的不一样,很多时候找不到正确的 Python 路径或者脚本路径。首先:- 确认脚本的真实路径:你问题里说文件是
/home/pi/probemon.py,但定时任务里写的是/home/pi/probemon/probemon.py,这大概率是笔误,先修正路径。 - 找到 Python 的绝对路径:在终端执行
which python或者which python3,比如得到/usr/bin/python3,然后把定时任务里的python替换成这个绝对路径,避免 cron 找不到 Python。
- 确认脚本的真实路径:你问题里说文件是
用 Root 的 Crontab 代替 sudo
既然脚本需要 sudo 权限运行,直接编辑 root 用户的 crontab 会更稳妥,不用在命令里加 sudo。执行sudo crontab -e,然后添加定时任务:52 23 * * * /usr/bin/python3 /home/pi/probemon.py这样任务会以 root 权限直接执行,避免 sudo 在 cron 里可能出现的权限验证问题。
添加日志输出排查错误
cron 默认不会输出任何信息,你根本不知道哪里错了。给定时任务加上日志重定向,方便排查:52 23 * * * /usr/bin/python3 /home/pi/probemon.py >> /home/pi/probemon_cron.log 2>&1之后查看
/home/pi/probemon_cron.log文件,就能看到脚本执行时的报错信息,比如依赖缺失、权限不足、路径错误等。确保脚本有执行权限并添加 Shebang
给脚本添加执行权限:chmod +x /home/pi/probemon.py,然后在脚本的第一行加上 Shebang 行,指定 Python 解释器路径,比如:#!/usr/bin/env python3这样脚本可以直接被执行,也能避免 cron 环境下的解释器问题。
先在终端测试完整命令
先在终端里直接运行你要放到 cron 里的完整命令,比如/usr/bin/python3 /home/pi/probemon.py,看能不能正常运行。如果终端里都跑不起来,那 cron 肯定也不行,先解决脚本本身的问题。
内容的提问来源于stack exchange,提问作者James Pannell
相关产品推荐
相关产品推荐

