之前使用crontab经常遇到一些问题,例如脚本不执行的问题,报错问题,在这里记录一下过程,先介绍一个python工具,可以自动更改和生成crontab运行脚本,使用起来非常友好:plan
一、安装
1 | $ pip install plan |
二、创建任务脚本
1 | from plan import Plan |
也可以使用下面命令自动创建,会在schedule
目录下生成一个schedule.py
文件
1 | mkdir schedule |
三、使用
直接在crontab配置文件中使用执行python脚本遇到了好多坑,最后还是使用sh脚本来运行,我们在schedule目录下创建一个文件夹bash
,新增一个sh脚本文件OneMinitesTask.sh
1 |
|
创建完后我们还需要保证添加可执行权限
1 | $ chmod +x OneMinitesTask.sh |
下面是schedule.py
1 | from plan import Plan |
运行脚本
1 | $ cd schedule |
查看crontab任务
1 | $ crontab -l |
ok,测试运行成功,使用python脚本配置crontab运行脚本可读性更强,更好维护
四、常见问题
1. 不确定任务是否运行,可以到/var/log/cron.log
查看crontab的运行日志
1 | $ vim /var/log/cron.log |
使用Shift+G
跳到最后一行
如果没有日志也可能是log服务没有开启,到/etc/rsyslog.d/50-default.conf
查看cron.* /var/log/cron.log
一行是否被注释掉了,如果注释掉了,把注释关了
1 | sudo vim /etc/rsyslog.d/50-default.conf |
2. 关闭crontab任务
如果要关闭定时crontab,使用下面命令
1 | # 删除crontab任务,删除后通过crontab -l查看则提示无任务 |
如果crontab的定时任务启动了,由于crontab只负责定时调用任务,crontab本身不支持任务的管理,如果需要关闭后台正在运行的任务,可以通过ps aux
命令查看任务的PID
,然后找到我们的任务,然后使用kill {PID}
杀掉任务即可