使用Python脚本结合Cron定时写入数据失败,寻求可行解决方案
解决sudo crontab运行Python脚本无效果的问题
看起来你已经折腾了一阵但没搞定,我来帮你一步步排查问题——毕竟cron的坑有时候确实挺隐蔽的:
先从最基础的权限和可执行性查起
- 给脚本加上可执行权限:虽然root用户运行脚本可能绕开权限限制,但保险起见还是补上,运行这条命令:
chmod +x /home/username/Documents/code/production/test.py - 检查目标文件的写入权限:你的脚本要写入
/home/username/Documents/code/production/msgs.txt,但root用户对普通用户的home目录有时候会有访问限制(比如默认home目录是700权限)。先手动测试root能不能写这个文件:
如果这步失败,要么给目标目录加权限:sudo touch /home/username/Documents/code/production/msgs.txt sudo echo "test cron write" >> /home/username/Documents/code/production/msgs.txtchmod 775 /home/username/Documents/code/production/,要么临时把输出文件换到root肯定有权限的位置(比如/tmp/msgs.txt)来快速验证脚本逻辑。
让crontab输出错误日志,抓出问题根源
你原来的crontab行只重定向了标准输出,没重定向错误输出,所以就算脚本跑失败了你也看不到原因。赶紧把crontab行改成这样:
*/1 * * * * /home/username/Documents/code/production/test.py >> /home/username/cron_test.log 2>&1
等一分钟后查看日志文件/home/username/cron_test.log,里面会明确告诉你是找不到Python解释器、路径错误还是权限问题。
避免环境变量导致的Python解释器问题
cron的环境变量和你平时登录的用户环境不一样,#!/usr/bin/env python3可能找不到正确的Python版本。你可以:
- 先查Python3的绝对路径:
which python3,比如得到/usr/bin/python3 - 要么把脚本的第一行改成
#!/usr/bin/python3,要么直接在crontab里用绝对路径调用Python:*/1 * * * * /usr/bin/python3 /home/username/Documents/code/production/test.py >> /home/username/cron_test.log 2>&1
确认crontab服务在正常运行
有时候服务停了都不知道,运行这条命令检查状态:
sudo systemctl status cron
如果显示inactive,就启动它:
sudo systemctl start cron sudo systemctl enable cron
最后做个手动测试
先切换到root身份运行脚本,看能不能正常工作:
sudo /home/username/Documents/code/production/test.py
如果手动运行正常,那问题肯定出在crontab的配置或环境上;如果手动运行也失败,那先解决脚本本身的路径或权限问题。
内容的提问来源于stack exchange,提问作者zwep
相关产品推荐
相关产品推荐

