这里写图片描述
crond作为linux定时任务的服务提供者,基本上linux上都会将此服务启动起来.但是在docker镜像中就未必如此了。很多时候镜像中没有crond服务,如果又不太方便安装,或者统一的镜像不太好为一个特殊的需求特意提供此项功能的时候,可以考虑使用外部的crontab通过docker exec来执行确认结果。

Crond服务确认

centos7上已经使用了systemd,所以不再是init.d,使用systemctl status crond则可确认crond的运行状态。

[root@liumiaocn ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-05-08 05:16:54 EDT; 1 months 24 days ago
 Main PID: 2334 (crond)
   Memory: 84.0K
   CGroup: /system.slice/crond.service
           └─2334 /usr/sbin/crond -n

May 08 05:16:54 liumiaocn systemd[1]: Started Command Scheduler.
May 08 05:16:54 liumiaocn systemd[1]: Starting Command Scheduler...
May 08 05:16:54 liumiaocn crond[2334]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 77% if used.)
May 08 05:16:55 liumiaocn crond[2334]: (CRON) INFO (running with inotify support)
Jun 19 02:37:01 liumiaocn crond[2334]: (*system*) RELOAD (/etc/crontab)
Jun 19 02:53:01 liumiaocn crond[2334]: (root) RELOAD (/var/spool/cron/root)
Jul 01 20:49:01 liumiaocn crond[2334]: (root) RELOAD (/var/spool/cron/root)
Jul 01 20:54:01 liumiaocn crond[2334]: (root) RELOAD (/var/spool/cron/root)
Jul 01 21:04:01 liumiaocn crond[2334]: (root) RELOAD (/var/spool/cron/root)
Jul 02 02:00:01 liumiaocn crond[2334]: (root) RELOAD (/var/spool/cron/root)
[root@liumiaocn ~]#

确认crond进程

在systemctl status crond 中确认到了其启动的PID,所以使用其可以确认状态

[root@liumiaocn ~]# ps -ef |grep 2334 |grep -v grep
root      2334     1  0 May08 ?        00:00:17 /usr/sbin/crond -n
[root@liumiaocn ~]# 

crontab命令与设定文件

crontab命令

使用如下常见命令可以当前用户或者指定用户的定时任务进行编辑或者查看

项番命令说明
No.1crontab -l列出当前用户的crontab信息
No.2crontab -e编辑当前用户的crontab信息
No.3crontab -u指定某一用户,可以与其他选项结合起来,比如crontab -u root -l列出root的crontab信息
No.4crontab -r删除当前用户crontab信息

设定文件

以root为例,其crontab的设定文件为/var/spool/cron/root

crontab文件格式

crontab例: 每分钟执行一次/tmp/check_system.sh

* * * * * /tmp/check_system.sh

格式说明:

项番内容说明
No.1*表示分钟,范围为1~59
No.2*表示小时,范围为1~23(0表示子夜)
No.3*表示日期,范围为1~31
No.4*表示月份,范围1~12
No.5*表示星期的某一天,范围为0~6(0表示星期天)
No.6/tmp/check_system.sh执行的命令或者文件

cron日志

cron运行结果的日志如下所示:

项目详细
cron log/var/log/cron

例子信息如下

liumiaocn CROND[15747]: (root) CMD (docker exec -it ...

其他确认信息

其他确认信息,有时mail的日志也能提示一定信息. 比如在cron日志可以看到docker exec -it 的信息,但是没有报错,发现没有执行,
结果在如下的mail日志中发现了”the input device is not a TTY”的错误提示,提示了t(for tty),所以直接docker exec 就没有问题了,错误信息的提示有的时候还是很重要的,不然有可能很简单的错误都容易被视而不见。

项目详细
mail log/var/spool/mail/root
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐