docker镜像中的定时任务

Posted firsttry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker镜像中的定时任务相关的知识,希望对你有一定的参考价值。

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

Crond服务确认

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

[[email protected] ~]# 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)
[[email protected] ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

确认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 ~]# 
  • 1
  • 2
  • 3

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
  • 1

格式说明:

项番内容说明
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 ...
  • 1

其他确认信息

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

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

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed



以上是关于docker镜像中的定时任务的主要内容,如果未能解决你的问题,请参考以下文章

快速使用分布式定时任务 xxl-job

定时清理docker私服镜像

Sonatype Nexus Repository Manager清除无用的docker镜像

docker 定时清理none镜像

在 AWS 任务中运行两个 docker 镜像

docker中使用docker