使用crontab的初衷是为了进行服务拉起。编写了一个py脚本去进行拉起(若服务挂了,则拉起;没挂,则什么也不做。判断服务挂没挂是根据ps命令查看该进程是否还在。
),crontab每隔一分钟去执行一次该脚本。
本以为会很顺利,但遇到了一些问题,这里记录一下。
问题原因
手动执行py脚本,正常;杀死程序,使用crontab调用py拉起程序,程序未被成功拉起。
分析
crontab程序有没有正常运行
# 查看cron是否运行
ps -aux | grep cron
# 运行cron
service crond start
# 重新运行cron
service crond restart
crontab添加的定时任务有没有在运行
# 找到cron的日志文件,看到定时任务是每隔一分钟在执行的
/var/log/cron
# 添加定时任务
crontab -e
# 当前运行定时任务列表
crontab -l
定时任务在执行,却没成功,环境问题?
# 写了个shell脚本,在其中加入
#!/usr/bash
source /etc/profile
python xxx.py #运行服务拉起程序
这里注意py脚本的路径,刚开始将shell脚本和py脚本放在同一目录下,py脚本的路径就直接写的它的名字,以为可以通过相对路径找到,结果并没有!所以在不清楚的情况下,可以写绝对路径。
在这里,编写shell脚本还有一个原因,即以为crontab不能执行py脚本。后来在添加crontab定时任务时,将执行脚本的日志打印在一个文件,发现是使用crontab执行py脚本和直接使用python命令执行脚本时,因为环境不一样,导致py里import包时失败。
# 设置定时任务--将错误日志打印在test.log中
*/1 * * * * /Users/horizonliu/test.sh > /Users/horizonliu/test.log 2>&1 &
# cron执行py脚本时因环境不一样失败解决办法,在py脚本头部添加:
#!/usr/local/bin/python
参考博客
Linux crontab定时任务不执行时的分析方法:https://www.centos.bz/2017/08/linux-crontab-issue-solve/
python脚本在crontab定时任务中无法执行,但手动执行成功: https://blog.csdn.net/suibianshen2012/article/details/64124191