买了阿里云ECS,部署好后打算定时执行python程序
- 首先,制定计划
crontab -e
- 进入vim模式
命令 | 作用 |
---|---|
s | 插入字符 |
:wq | 保存退出 |
:q | 不保存退出 |
Esc | 退出当前命令 |
每天8点执行,填写绝对路径
00 8 * * * /usr/bin/python3 /root/test.py
- 检查是否添加成功
crontab -l
- 检查服务状态
service crond status
正常显示 active(running)
此时,到指定时间程序没有任何反应,开始排查
- 先按网上的办法,查看日志
tail /var/log/cron
报错信息为
MAIL (mailed 54 bytes of output but got status 0x004b#012)
然后
cat /var/log/maillog
提示没有log文件,不过现在知道了计划有运行过,再尝试其他办法
- 切换到python程序目录,赋予可执行权限
chmod a+x test.py
更改配置文件
vim /etc/postfix/main.cf
将inet_interfaces=localhost
改为inet_interfaces=all
此时不再报错,但依然无效
- 编辑python文件头部
#!/usr/bin/python3
# -- coding: utf-8 -
- 无效,于是重定向输出日志
00 8 * * * /usr/bin/python3 /root/test.py 2>>/home/log
原因为python程序内引用的变量含有相对路径,
交给Crontab就无法识别了,
全部更改为绝对路径后正常执行