赞
踩
Linux定时任务是一种自动化执行指定任务的机制。它可以在特定的时间或事件发生时自动地执行指定的命令或脚本。Linux定时任务可以用于各种不同的任务,例如备份数据、定期清理日志、定时重启服务等
Linux定时任务主要有两种类型:
一种是基于系统内置的cron
服务,另一种是基于系统自带的at
服务。下面我们分别来介绍这两种定时任务的使用方法。
at是定时任务工具,依赖于atd服务,适用于执行一次就结束的调度任务
例如: 凌晨3点需要临时备份数据文件等,可以使用到at
要想使用at一次性计划任务时,我们的Linux系统上面必须要有负责这个计划任务的服务,就是atd服务
有些Linux版本默认不会打开,需要我们手动打开激活服务
[root@csq ~]# systemctl start atd
[root@csq ~]# systemctl status atd # 查看是否运行
语法
at[参数] [时间]
参数 | 解释 |
---|---|
-m | 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出 |
-I | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q | 使用指定的列队 |
-f | 从指定文件读入任务而不是从标准输入读入 |
-t | 以时间参数的形式提交要运行的任务 |
at使用的指定时间也比较复杂
可以使用当前时间,或者第二天时间来表示例如:
可以使用单词来指定时间例如:
midnight(深夜)
noon(中午)
teatime(饮茶时间,下午4点)
还可以采用12小时制上下午来表示:
AM(上午)
PM(下午)
也能够使用命令执行的具体日期
上面介绍的都是绝对时间,也可以使用相对时间计时,这对于马上要执行的命令有着绝对的效率
格式: now + count time-units
now就是当前时间
count 是时间的数量,几天或几小时,today,tomorrow来指定完成命令时间
time-units:是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)
一分钟后打印csq
[root@csq ~]# at now+1min
at> echo 'csq'
at> <EOT>
job 12 at Tue Mar 21 20:38:00 2023
明天17点中,创建一个文件,把当前时间写进去
[root@csq ~]# at 17.00 tomorrow
at> date >> time.txt
at> <EOT>
job 15 at Wed Mar 22 17:00:00 2023
计划任务设定后,在没有执行计划任务之前,我们可以使用atq命令来查看系统有没有执行工作任务
[root@csq ~]# atq
15 Wed Mar 22 17:00:00 2023 a root
[root@csq ~]# at -l
15 Wed Mar 22 17:00:00 2023 a root
显示已经设置完成的任务内容
[root@csq ~]# at -c 15
删除已经设置完成的任务
[root@csq ~]# atrm 15
[root@csq ~]# atq
[root@csq ~]#
既然是计划任务,那么应该就会有他的任务执行方式, 那么产生计划任务的方式是怎么进行的?
我们使用at这个命令产生的计划任务,并将这个计划任务以文档的方式写入/var/spool/at 目录内,该计划任务就可以等待atd服务来执行。
并不是所有人用户都可以进行at计划任务,因为如果主机被攻击破解后,黑客会在他们电脑中植入很多黑客程序,这些程序可能会使用一些计划任务来运行,来控制你的电脑获取你的信息,所以不是很安全的用户,不要让他们使用at命令。
我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。
加上这两个文件后, at 的工作情况是这样的:
先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中)
由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)
如果你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行
如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
给chenshiren这个用户加入黑名单不让他使用at命令
[root@localhost home]# vi /etc/at.deny
chenshiren
[root@localhost home]# su - chenshiren
[chenshiren@localhost ~]$ at
You do not have permission to use at.
给chenshiren这个用户加入白名单能让他使用at命令
[root@localhost home]# vi /etc/at.allow
chenshiren
[root@localhost home]# su - chenshiren
[chenshiren@localhost ~]$ at now+5min
at> echo 'csq'
at> <EOT>
job 1 at Wed Mar 22 07:09:00 2023
[chenshiren@localhost ~]$ atq
1 Wed Mar 22 07:09:00 2023 a chenshiren
crond进程提交任务的方式与at不同,crond需要读取配置文件,且有固定的文件格式,通过crontab命令管理文件
先查看crond服务是否开启,如果没有这项服务就安装
systemctl status crond
安装crond服务
yum install -y cronie
crond服务启动
systemctl start crond && systemctl enable crond
系统定时配置文件解析 /etc/crontab
[root@localhost home]# cat /etc/crontab
SHELL=/bin/bash # 指定shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin # 指定了系统可执行文件路径
MAILTO=root # 指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户
....
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
语法
crontab(选项)(参数)
选项 | 解释 |
---|---|
-e | edit编辑定时任务 |
-l | list查看定时任务 |
-r | 删除定时任务,移除/var/spool/cron/username文件 |
-u | 指定用户执行任务,root可以管理普通用户的计划任务 |
-i | 删除定时任务,提示用户确认删除,避免出错 |
参数
crontab文件:指定包含待执行任务的crontab文件
同at命令一样都可以设置使用者的使用命令权限
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
crontab任务格式:
minute hour day month week command 顺序:分 时 日 月 周
minute 表示分钟 可以取0~59的整数
hour 表示小时 可以取 0~23 (0表示0点)
day 表示日期 可以取 1~31
month 表示月份 可以取 1~12
week 表示星期 可以取 0~7 (0或7表示星期天)
以上各个字段,还可以使用下面的特殊字符
星号 * 代表所有可能的值
逗号 , 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠 - 可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线 / 可以用正斜线指定时间的间隔频率 例如“0-23/2”表示每两小时执行一次。
每天上午8点30,去上学
30 08 * * * go to school
每一分钟执行一次
* * * * *
每小时执行一次
00 * * * *
每周六和周日下午 1点和2点的每一分钟斗执行
* 13,14 * * 6,0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。