Docker容器内运行定时任务crontab

Posted

tags:

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

参考技术A 基础镜像: centos

容器启动时执行

/usr/sbin/crond -i(后台执行)

即可。

对,就这么简单。

定义cron job有两种方式:

1、使用命令crontab -e;

2、vim编辑/etc/crontab;

其中,前者是在当前用户下的定时任务,不用加用户,后者只有root才可以编辑,需要多指定一个执行用户。

题外话,有人用systemctl start crond.service,来启动crond,这里有一个巨大的冲突,就是systemctl依赖initd进程,Linux操作系统的initd进程必须占用1号进程,而docker的启动脚本也是1号进程,虽然这个冲突可以通过/usr/sbin/systemd --system来避免,但执行systemctl命令还是可能有操作权限的问题,因此,直接启动crond即可。

centos7 ubuntu crontab定时任务

写shell脚本,crontab 定时运行 更改时区后,应该重启

vi *.cron     编辑定时任务
crontab *.cron 添加定时任务
crontab -l  显示当前用户正在运行的定时任务

crontab -e   修改定时任务

crontab -r     删除定时任务


tail -f /var/log/cron  查看日志,可看执行情况

systemctl start crond.service 启动服务
systemctl stop crond.service 停止服务
systemctl restart crond.service 重启服务

systemctl status crond.service  查看状态


内容形如:

* * * * * 命令

对应:

分 时 日 月 周 命令


"*"代表所有的取值范围内的数字。特别要注意哦!

"/"代表每的意思,如"*/5"表示每5个单位

"-"代表从某个数字到某个数字

","分散的数字


例如:

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache


* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache


0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache


45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。


以下为ubuntu下使用方案,基础操作与上面一致,但服务名称为cron:

cron 开启log服务
~$ sudo vi /etc/rsyslog.d/50-default.conf

#cron.*    /var/log/cron.log //去掉#,开启log机制

~$ sudo service rsyslog restart   重启log
~$ sudo service cron restart 重启服务

另外:没有再centos7下尝试
1 * * * * /auto.sh >> /log.txt 2>&1  
2>&1  将运行详细结果输入到log.txt中去。    解决No MTA installed, discarding output的问题。

以上是关于Docker容器内运行定时任务crontab的主要内容,如果未能解决你的问题,请参考以下文章

在 Docker 容器内集成 Crontab 定时任务

在 Docker 容器内集成 Crontab 定时任务

让docker任务可以后台运行

定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)

如何在本地运行一次性 Docker 容器(从容器内触发)

docker(ubuntu)中安装cron运行crontab定时任务