Linux Crontab 定时任务

本文详细介绍了Linux中crontab的使用,包括系统任务调度和用户任务调度,以及如何通过crontab命令来设置定时任务。crontab文件的格式和时间设定规则被详细阐述,例如每分钟、每小时、每天、每周和每年的执行设置。文章还给出了crontab命令的使用方法,并展示了创建和编辑cron脚本的步骤。此外,还列举了一些crontab配置实例,如每五分钟执行一次任务,以及在特定时间间隔执行任务。最后,文章指出crontab不适用于需要连续执行的任务,且非整小时间隔的任务设置限制。

导读

Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集等。
在这里插入图片描述

在Linux中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]

cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。

crontab配置文件

Linux下的任务调度分为两类:系统任务调度和用户任务调度。Linux系统任务是由 cron (crond) 这个系统服务来控制的,这个系统服务是默认启动的。用户自己设置的计划任务则使用crontab 命令。在CentOS系统中,

1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

配置文件路径一

cat /etc/crontab

配置文件可以看到如下解释:

在这里插入图片描述

前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash;第二行PATH变量指定了系统执行命令的路径;第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 这一行以后的命令,我们可以发现,五个数字后面接的是 root ,这一行代表的是『执行的级别为root身份』当然,你也可以将这一行改为成其他的身份!而 run-parts代表后面接的 /etc/cron.hourly 是『一个目录内(/etc/cron.hourly)的所有可执行文件』,也就是说,每个小时的01分,系统会以root身份去/etc/cron.hourly这个目录下执行所有可执行的文件!后面三行也是类似的意思!你可以到 /etc/ 底下去看看,系统本来就预设了这4个目录!你可以将每天需要执行的命令直接写到/etc/cron.daily即可,还不需要使用到crontab -e的程式!

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

配置文件路径二

# 这个目录下存放的是每个用户包括root的crontab任务,
# 每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。
# 一般一个用户最多只有一个crontab文件。
/var/spool/cron/

配置文件路径三

# 这个目录用来存放任何要执行的crontab文件或脚本
/etc/cron.d/

crontab文件含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

在这里插入图片描述
在以上各个字段中,还可以使用以下特殊字符:

" * "代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;

"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。

"-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。

","分散的数字(不一定连续),如1,2,3,4,7,9。

注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)。

crontab命令详解

格式:

crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }

• -u user:用于设定某个用户的crontab服务;
• file: file为命令文件名,表示将file作为crontab的任务列表文件并载入crontab;
• -e:编辑某个用户的crontab文件内容,如不指定用户则表示当前用户;
• -l:显示某个用户的crontab文件内容,如不指定用户则表示当前用户;
• -r:从/var/spool/cron目录中删除某个用户的crontab文件。
• -i:在删除用户的crontab文件时给确认提示。

crontab注意点

  1. crontab有2种编辑方式:直接编辑/etc/crontab文件与crontab –e,其中/etc/crontab里的计划任务是系统中的计划任务,而用户的计划任务需要通过crontab –e来编辑;
  2. 每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。
  3. crontab中的command尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行。
  4. 新创建的cron job不会马上执行,至少要等2分钟才能执行,可重启cron来立即执行。
  5. %在crontab文件中表示“换行”,因此假如脚本或命令含有%,需要使用%来进行转义。
  6. crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
  7. 使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。

创建cron脚本

  • 第一步:写cron脚本文件,命名为crontest.cron。
    15,30,45,59 * * * * echo “xgmtest…” >> xgmtest.txt 表示,每隔15分钟,执行打印一次命令
  • 第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定
  • 第三步:“crontab -l” 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
    注意:这操作是直接替换该用户下的crontab,而不是新增

也可以crontab -uroot -e编辑定时执行写好脚本,例如crontab -uroot -e进入编辑页面如下,/root/updatecode.sh为脚本所在位置
在这里插入图片描述

crontab配置实例

每五分钟执行  */5 * * * *
每小时执行     0 * * * *
每天执行        0 0 * * *
每周执行       0 0 * * 0
每月执行        0 0 1 * *
每年执行       0 0 1 1 *

# 每一分钟执行一次 /bin/ls
* * * * * /bin/ls

# 每隔2天的上午8-11点的第3和15分钟执行command
3,15  8-11  */2  *   *  command

# 每个星期一的上午8点到11点的第3和第15分钟执行command
3,15  8-11   *   *  1 command

# 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"

# 每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30  18-23  *  *  *  /etc/init.d/smb restart

# 每月的1、11、21、31日是的6:30执行一次ls命令
30 6 */10 * * ls  

# 在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup

# 周一到周五每天下午 5:00 寄一封信给 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata

问题

这是对在我自学之后产生的疑问的总结,不一定对,如果有懂的欢迎指正。

  1. Corntab不能执行执行完之后接着执行的需求,例如爬虫的需求是任务需要不间断执行。
  2. Crontab不能间隔非整小时,例如一个半小时。半个小时是可以的。

本文转载自:
https://www.linuxprobe.com/how-to-crontab.html
https://www.runoob.com/linux/linux-comm-crontab.html
https://blog.csdn.net/wade3015/article/details/90289751

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值