docker镜像中的定时任务

来源:互联网 发布:淘宝开店企业交税 编辑:程序博客网 时间:2024/06/04 19:56

这里写图片描述
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 -nMay 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 greproot      2334     1  0 May08 ?        00:00:17 /usr/sbin/crond -n[root@liumiaocn ~]# 

crontab命令与设定文件

crontab命令

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

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