EC2实例Cron任务仅登录AWS时运行问题求助
问题排查:Cloud9 EC2实例Cron任务仅登录时运行
背景
在Cloud9 IDE的EC2实例中部署了两个每日从Google API提取数据的Python脚本,通过crontab -e配置定时任务如下:
15 11 * * * /usr/bin/python3 /home/ec2-user/environment/GAM/custom_targeting.py45 11 * * * /usr/bin/python3 /home/ec2-user/environment/GAM/ad_line_item_delta.py
核心问题
多次测试发现,仅登录AWS账号时Cron任务才会运行,退出账号或关闭电脑后任务完全不执行。已关闭EC2默认30分钟自动休眠功能(设置为永不休眠),但问题依旧。
已排查信息
crontab -l输出显示任务配置存在换行格式问题- 执行
sudo service cron status提示Unit cron.service未找到 cat /etc/crontab输出为SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root(参数未分行)
排查思路
1. 修复系统crontab文件格式错误
系统级/etc/crontab中SHELL、PATH、MAILTO参数必须各自独立成行,当前连写状态会导致cron无法识别环境变量。执行:
sudo nano /etc/crontab
修改为以下格式并保存:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root
随后重启crond服务(EC2实例使用crond而非cron服务名):
sudo service crond restart
2. 确认crond服务状态与开机自启
执行以下命令检查服务状态并设置开机自启:
- 查看服务状态:
sudo service crond status - 设置开机自启:
sudo chkconfig crond on
确保服务处于running状态,无报错信息。
3. 修复用户crontab的换行问题
执行crontab -e打开编辑界面,确保两个定时任务各占一行,无多余换行或格式混乱:
15 11 * * * /usr/bin/python3 /home/ec2-user/environment/GAM/custom_targeting.py 45 11 * * * /usr/bin/python3 /home/ec2-user/environment/GAM/ad_line_item_delta.py
保存后执行crontab -l确认格式正确。
4. 验证脚本独立运行能力
退出当前Cloud9会话,通过SSH或AWS系统管理器远程连接EC2实例,手动执行脚本:
/usr/bin/python3 /home/ec2-user/environment/GAM/custom_targeting.py
确认脚本无需依赖登录会话的环境变量即可正常运行(比如Google API认证文件需使用绝对路径,脚本内的相对路径全部改为绝对路径)。
5. 检查cron运行日志与脚本输出
查看cron任务触发日志:
sudo tail -f /var/log/cron
若日志无任务执行记录,说明crond未加载任务;若有执行记录但脚本失败,在crontab中添加日志重定向捕获错误:
15 11 * * * /usr/bin/python3 /home/ec2-user/environment/GAM/custom_targeting.py >> /home/ec2-user/cron_custom_targeting.log 2>&1
通过日志文件排查脚本执行失败的具体原因。
6. 确认Cloud9实例的持续运行状态
- 登录AWS控制台进入EC2页面,确认实例状态为运行中
- 检查实例是否开启终止保护,避免意外终止
- 再次确认Cloud9环境设置中,「停止环境」选项已设为「永不」
内容的提问来源于stack exchange,提问作者Leonard
相关产品推荐
相关产品推荐

