AWS Ubuntu环境下Cron无法运行Python脚本问题求助
我之前在AWS Ubuntu上也踩过Cron的类似坑,给你一步步梳理排查方向:
先搞定路径问题,别用
~/
Cron的执行环境不识别~这种Shell简写,建议把脚本路径换成绝对路径。先执行echo $HOME拿到你的用户目录绝对路径(比如/home/ubuntu),然后把定时任务改成:* * * * * /usr/bin/python3 /home/ubuntu/Cloudtest/main.py另外,脚本里如果有相对路径引用(比如读取同目录下的文件),也要改成绝对路径,不然Cron找不到。
重定向输出到日志,抓错误信息
Cron默认不会把输出打印到你的当前Shell(它是后台独立运行的),所以你看不到test很正常。把输出和错误重定向到日志文件,就能知道问题出在哪:* * * * * /usr/bin/python3 /home/ubuntu/Cloudtest/main.py >> /home/ubuntu/cron_test.log 2>&1等1分钟后查看日志:
cat /home/ubuntu/cron_test.log,里面会有脚本的输出或者报错(比如找不到模块、权限不足)。检查Cron服务是否在运行
先确认Cron服务没挂掉:sudo systemctl status cron如果显示
inactive,就启动它:sudo systemctl start cron sudo systemctl enable cron # 设置开机自启查看Cron系统日志,确认任务是否被触发
Ubuntu的Cron运行记录存在/var/log/syslog里,用这个命令过滤:grep CRON /var/log/syslog你能看到Cron是否尝试执行你的任务,比如类似
(ubuntu) CMD (/usr/bin/python3 /home/ubuntu/Cloudtest/main.py)的记录,说明任务已经触发;如果有报错,也会在这里显示(比如权限问题)。排查环境变量差异
手动运行Shell时的环境变量和Cron的不一样,比如PATH更窄,或者你手动装的Python依赖不在Cron的环境里。可以在Cron命令里先加载你的Shell环境,比如:* * * * * source ~/.bashrc && /usr/bin/python3 /home/ubuntu/Cloudtest/main.py或者在Python脚本开头直接指定依赖的绝对路径(如果有第三方库的话)。
确认文件权限
确保你的main.py能被Cron的执行用户(默认是你当前用户)读取:ls -l /home/ubuntu/Cloudtest/main.py如果权限是
-rw-------,那没问题;如果是其他情况,比如-rw-r--r--也可以,必要的话调整权限:chmod 644 /home/ubuntu/Cloudtest/main.py
内容的提问来源于stack exchange,提问作者Mohamad Chahal

