crontab踩坑

crontab踩坑

最近使用crontab处理一下定时任务,但是发现总会碰到各种坑,这里记录一下踩坑过程。

1. 创建定位任务

创建定时任务有两种方式:一种是命令方式,一种是直接编辑文件

方式1
终端输入:crontab -e命令
输入你的定时任务,如:*/2 * * * * echo "Hello world!" >> /tmp/cron_log.txt   #表示每分钟执行一次该任务
保存退出

方式2
vim /var/spool/cron/crontabs/root   # 由于我是使用容器操作的,用户默认是root,若root文件不存在,则创建之
输入你的定时任务,如:*/2 * * * * echo "Hello world!" >> /tmp/cron_log.txt   #表示每分钟执行一次该任务
保存退出

2.启动定时任务

service cron start   # 可通过service cron status/stop/restart/reload等命令进程查看状态/停止定时任务/重启服务/重新加载定时任务

3. 问题总结

3.1 定时任务不执行

启动定时任务后,有时会发现定位任务并没有执行,此时需要查看日志,cron的日志在/var/log/cron.log中可以查看,如:

在ubuntu系统默认是不打开cron日志的,也就无法查看/var/log/cron.log(找不到该文件),要查看则需要打开相应的配置。

vim /etc/rsyslog.d/50-default.conf
打开文件,在文件中找到cron.*,把前面的#去掉,保存退出
重启rsyslog服务

但是有时会提示无rsyslog服务,此时需要先安装rsyslog

3.2 安装rsyslog

apt-get install rsyslog
修改 /etc/rsyslog.d/50-default.conf,  在文件中找到cron.*,把前面的#去掉
启动服务

启动rsyslog碰到问题

service rsyslog start 

启动rsyslog可能会碰到一下问题

rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted.

解决方案:

1. vim /etc/rsyslog.conf  # 打开该文件
2. 找到 $PrivDropToUser syslog and $PrivDropToGroup syslog 将其注释掉
3.  service rsyslog restart   # 重启 rsyslog

3.3 依然不执行该文件

重新编辑crontab定时任务文件,如下:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/2 * * * * echo "Hello world!" >> /tmp/cron_log.txt   #表示每分钟执行一次该任务

20200311 更新

本人在将系统从ubuntu16.04升级到18.04后,发现通过echo写入定时任务脚本后,启动cron, 脚本并不会执行,后来发现需要先crontab -e初始化定时任务文件(在/var/spool/cron/crontabs/root, root表示root用户的定时任务),初始化后使用echo写入定时任务就可以成功执行。

你可能感兴趣的:(linux操作相关,docker)