Linux利用Crontab执行定时任务

2023-05-02 10:22:53 浏览数 (2)

简介

工具型软件cron是一款类Unix的操作系统下的基于时间的任务管理系统。用户们可以通过cron在固定时间、日期、间隔下,运行定期任务(可以是命令和脚本)。cron常用于运维和管理,但也可用于其他地方,如:定期下载文件和邮件。cron该词来源于希腊语chronos(χρόνος),原意是时间。

通常,任务时间表(crontab)文件储存的指令被crond守护进程激活,守护进程在后台运行,并每一分钟检查是否有定期的作业需要执行。这类作业一般称为cron jobs

我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。

  • /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
  • /etc/crontab 这个文件负责调度各种管理和维护任务。
  • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
  • 我们还可以把脚本放在 /etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly 目录中,让它每小时/天/星期、月执行一次。

使用

Crontab常用命令格式如下

此处内容需要评论回复后方可阅读

如何让一个定时任务一次执行多个命令

多个命令可以放在一行上,其执行情况得依赖于用在命令之间的分隔符。

如果每个命令被一个分号";"所分隔,那么命令会连续的执行下去

如果每个命令被 && 号分隔,那么这些命令会一直执行下去,如果中间有错误的命令存在,则不再执行后面的命令,没错则执行到完为止

如果每个命令被双竖线(||)分隔符分隔,如果命令遇到可以成功执行的命令,那么命令停止执行,即使后面还有正确的命令则后面的所有命令都将得不到执行。假如命令一开始就执行失败,那么就会执行 || 后的下一个命令,直到遇到有可以成功执行的命令为止,假如所有的都失败,则所有这些失败的命令都会被尝试执行一次

为什么有的定时任务的命令没有被执行?

可能是Crontab没有找到相关的二进制文件,你需要在命令中明确指定相关命令的二进制文件的位置。

以Docker命令为例,假设你想要执行 docker cp /etc/localtime bitwardenrs:/etc/localtime ,它在命令行中执行没有任何问题,但是在crontab里面可能会出问题,原因就是crontab不知道docker在哪里。

那么如何明确告诉Crontab相应的文件位置呢?以上面的docker命令为例,我们怎么知道这个docker是哪里的docker?

方法很简单:使用which命令

代码语言:javascript复制
which docker

如此一来我们便得知了docker的位置了,那么命令换成 /usr/bin/docker cp /etc/localtime bitwardenrs:/etc/localtime 就没问题了。

如何查看crontab执行日志

代码语言:javascript复制
tail -f /var/log/cron

实例

此处内容需要评论回复后方可阅读

0 人点赞