Linux定时(计划)任务

本文介绍了Linux系统下的定时任务,包括at和cron两种工具。at用于设定一次性任务,如`at now +3 minutes`,而cron则用于周期性任务,其配置文件位于/etc/crontab。crontab命令用于管理用户计划任务,如`5 * * * * command`表示每小时的第5分钟执行command。文章还讲解了定时任务的语法、管理命令以及最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定时(计划)任务

1、概念:未来的某时间点执行一次某任务或者周期性的运行某个任务,执行结果会通过邮件的形式发送给用户

2、可将其分为两类:
(1)定点执行一次某任务:at,batch
(2)周期性的运行某任务:crontab

1.1 用户及系统定时任务

crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,可以使用命令:service crond status (CentOS6);systemctl status crond (CentOS7)进行查看。

crond进程定期(每分钟)检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。用户在cron表(也称为crontab文件)指定定时任务,crontab也就是常见的定时任务设置命令。Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件就是系统任务调度的配置文件。

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

1.2 定时任务语法

先了解一下mail命令,因为我们所有的定时任务在执行结束后都会通过邮件通知。

使用mail发邮件时,必须先将sendmail服务启动。
mail -s “邮件主题” -c “抄送地址” -b “密送地址” -f 发送人邮件地址 -F 发件人姓名 < 要发送的邮件内容

1、at命令:

计划任务,在特定的时间执行某项工作,在特定的时间执行一次,需要安装at服务,apt-get install at

1、时间定义
hh:mm 12:00
midnight(深夜)noon (中午) teatime(饮茶时间,一般是下午4点)
AM PM 8am 9pm
2019-8-11 2019/8/11
+ 5 minutes hours days weeks
today tomorrow

2、语法结构

at 选项 参数
-q:列出任务
-f :从文件中读取
-l :列出任务
-d:指定删除
-v:列出已执行未删除的任务
-V:印出版本编号
-c:查看作业内容

at:在特定的时间执行一次性的任务
atq:列出用户的计划任务
atrm:根据任务号删除at任务
batch:在系统负荷允许的情况下执行at任务,即在系统空闲的情况下才执行at任务

3、示例:

[root@localhost ~]# at now +3 minutes #3分钟后执行

at> echo “hello” #输入任务

at> #Ctrl+D会直接退出

job 1 at 2019-08-06 15:58
[root@localhost ~]# atq #查看待处理作业

1 2019-08-06 15:58 a root
[root@localhost ~]# at now +7 minutes #7分钟后执行

at> echo “hello”
at>
job 2 at 2019-08-06 16:03
[root@localhost ~]# atq #查看待处理作业

2 2019-08-06 16:03 a root
1 2019-08-06 15:58 a root
[root@localhost ~]# atrm 2 #删除待处理作业

[root@localhost ~]# at -c 3 #根据作业ID查看作业内容

#!/bin/sh
#atrun uid=0 gid=0
#mail root 0
umask 22
HOSTNAME=localhost.localdomain; export HOSTNAME

. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

cd /root || {
echo ‘Execution directory inaccessible’ >&2
exit 1
}
${SHELL:-/bin/sh} << ‘marcinDELIMITER63bd06f2’
echo “world”>1.txt

marcinDELIMITER63bd06f2

2、cron命令

1、在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

#For details see man 4 crontabs

#Example of job definition:
#.---------------- minute (0 - 59)
#| .------------- hour (0 - 23)
#| | .---------- day of month (1 - 31)
#| | | .------- month (1 - 12) OR jan,feb,mar,apr …
#| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
#| | | | |
#* * * * * user-name command to be executed
每行定义一个周期性任务,共7个字段;

#用户任务调度:用户定期要执行的工作。可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件被保存在/var/spool/cron目录中。其文件名与用户名一致。

在这里插入图片描述
示例:
5 * * * * 每小时的第五分钟执行一次
3 4 * * 5 每周的4时3分执行一次
5 6 7 * * 每月的7号的6时5分执行一次
7 8 9 10 * 每年10月9日8时7分执行一次
*/5 * * * * 每隔五分钟执行一次

2、crontab命令

service crond start:启动服务
service crond stop:关闭服务
service crond restart:重启服务
service crond reload:重新载入配置
service crond status:启动服务
选项:-e:编辑任务
-l:列出所有任务
-r:移除所有任务
-i:在使用-r选项移除所有任务时提示用户确认
-u user:root用户可为指定用户管理cron任务

3、计划任务规范:
1、脚本要规范,脚本存放位置要规范,便于维护
2、定时任务要写注释
3、执行的脚本要带绝对路径
4、执行结果的标准输出或者错误输出 >/dev/null
5、可以以命令完成的任务,也要写在脚本
6、分用户执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值