Ubuntu 16.04下Cron调用Shell脚本执行Python3定时任务的问题
问题分析与解决方案
咱们先梳理下你当前遇到的两个核心问题:Cron表达式配置错误,以及Shell脚本的执行逻辑漏洞。让我们一步步来解决:
1. 修正Cron表达式:实现“每小时第2分钟执行”
你当前用的*/2 * * * *是每2分钟执行一次任务,这和你想要的“每小时的第2分钟执行”完全不符。正确的Cron表达式应该是:
2 * * * * bash /home/john/PYTHONS/MASTER.sh
这个表达式的含义是:分钟固定为2,小时、日期、月份、星期无限制,也就是每天每小时的第2分钟触发一次任务。
2. 修复Shell脚本的执行逻辑
你的Shell脚本存在几个潜在问题,比如切换目录后未处理失败情况、Python路径可能不明确等。这里给你一个可靠的版本:
#!/bin/bash # 切换到Python脚本所在目录,如果切换失败则直接退出,避免后续命令在错误路径执行 cd /home/john/PYTHONS/ || exit 1 # 先在终端执行`which python3`,获取你的Python3实际绝对路径,替换下面的内容 PYTHON_PATH="/usr/bin/python3" # 执行两个Python脚本,并将输出和错误信息写入日志,方便排查问题 $PYTHON_PATH COMPLEXPYTHON.py >> /home/john/PYTHONS/cron_task.log 2>&1 $PYTHON_PATH SIMPLEPYTHON.py >> /home/john/PYTHONS/cron_task.log 2>&1
脚本关键细节说明:
cd /home/john/PYTHONS/ || exit 1:如果切换目录失败(比如目录不存在),脚本会立即退出,避免后续Python脚本在错误的工作目录执行(可能导致依赖文件找不到)。- 使用Python3绝对路径:Cron的环境变量PATH比用户登录后的PATH窄很多,直接写
python3可能会找不到命令,所以必须用which python3查清楚实际路径再替换。 - 日志重定向:
>> ... 2>&1会把脚本的正常输出和错误信息都写入日志文件,方便你后续排查任务是否执行成功、哪里出了问题。
3. 确保Shell脚本具备可执行权限
执行以下命令给脚本添加可执行权限,否则Cron可能无法直接运行它:
chmod +x /home/john/PYTHONS/MASTER.sh
4. 验证与排查问题
- 先手动执行脚本,确认它能正常工作:
执行后查看日志文件bash /home/john/PYTHONS/MASTER.sh/home/john/PYTHONS/cron_task.log,确认两个Python脚本都正常执行。 - 查看Cron的运行日志,确认任务是否被触发:
- 大部分Linux系统可以查看
/var/log/cron文件; - 用systemd的系统可以执行
journalctl -u cron.service查看Cron服务的日志。
- 大部分Linux系统可以查看
内容的提问来源于stack exchange,提问作者John Bailey
相关产品推荐
相关产品推荐

