只执行一次就结束了,一般是用户的延迟任务,可以用命令 at 来执行
在红帽企业版 Linux 中,⽤⼾安排延迟任务,可⽤的解决⽅案之⼀为 at。该软件包提供了 atd 系
统守护进程,以及⼀组与守护进程交互的命令⾏⼯具。在默认情况下,将⾃动安装并启⽤ atd 守
护进程。
使用命令:
at TIMESPEC(参数) 代表从现在起5分钟之后执行一个任务
⼿动输⼊命令时,你可以按 Ctrl + D 来完成输⼊
TIMESPEC参数与 at 命令可以接受许多强⼤组合。这些组合以时间(例如 02:00、15:59 甚⾄ teatime )开头,后⾯接⼀个可选⽇期或将来的天
数。下⾯列出⼀些可⽤的组合⽰例。
at now +5min
at teatime tomorrow (下午茶时间为 16:00 )
at noon +4 days
at 5pm auguest 3 2023
计划从现在开始1分钟后向所有用户发出 hello
[fu@bogon ~]$ at now +1min
warning: commands will be executed using /bin/sh
at> wall hello
at>
job 2 at Sat Mar 11 16:51:00 2023
查看当前用户待执行的任务
[fu@bogon ~]$ atq
3 Sat Mar 11 16:53:00 2023 a fu
移除一个待执行任务
[fu@bogon ~]$ atrm 5
1,at 命令指定的任务的队列是a-z队列,默认是在a队列,-q 参数可以指定队列。其他参数可以看man手
册
2,在 /var/spool/at 目录下面记载的有对应的待执行的计划任务
3, /etc/cron.deny 文件为不允许使用 at 命令及相关命令的文件,默认这个文件是存在的
/etc/cron.allow 文件与 /etc/cron.deny 文件相反,是允许使用at 及相关命令的文件,默认是不存在的,如果这2 个文件都存在,且在2个文件中都存在相同的用户,则起作用的文件是/etc/cron.allow 文件
[root@bogon ~]# ll /var/spool/
total 0
drwxr-xr-x. 2 root root 63 Mar 11 10:51 anacron
drwx------. 3 root root 31 Mar 11 16:55 at 单一例行的计划任务在这里
drwx------. 2 root root 6 Mar 11 11:07 cron 周期循环的计划任务
drwx--x---. 3 root lp 17 Mar 11 10:52 cups
drwxr-xr-x. 2 root root 6 Aug 10 2021 lpd
drwxrwxr-x. 2 root mail 16 Mar 11 11:02 mail
drwxr-xr-x. 2 root root 6 Feb 1 2022 plymouth
drwxr-xr-x. 3 root root 19 Mar 11 10:52 rhsm
红帽系统默认⾃带了特别针对周期性作业的 crond 守护进程,由 cronie 软件包提供,且默认启动。
crond 守护进程会读取多个配置⽂件(每个⽤⼾对应⼀个配置⽂件,使⽤ crontab 命令进⾏编辑)以及⼀组系统范围内的⽂件。这些配置⽂件使⽤⼾和管理员拥有细微的控制权,可以控制应执⾏周期性作业的时间。
如果计划的命令⽣成了任何未被重定向的输出或者错误,则 crond 守护进程将尝试使⽤系统中配
置的邮件服务器将该输出或错误通过电⼦邮件发送给拥有该作业的⽤⼾(除⾮被覆盖)。根据环
境,这可能需要进⾏其他配置。可以将计划命令的输出或者错误重定向到其他⽂件。
循环性的周期任务有用户的周期性任务以及系统的周期性任务
用户的周期性任务用 crontab -e 命令直接编辑即可
参数的格式:
分 时 日 月 周 命令 要执行的* 表⽰ ⽆关紧要或者始终
x-y 表⽰范围,x 到 y(含)
x,y 表⽰列表。列表也可以包含范围,例如 分钟 列中的 5,10-13,17 表⽰作业应当在每⼩时过去 5 分钟、10 分钟、11 分钟、12 分钟、13 分钟和17 分钟后运⾏
*/x 表⽰ x 的时间间隔,例如 分钟 列中的*/1 表⽰每1分钟运⾏⼀次作业
例:
*/1 * * * * echo 123 >> /home/test.txt 每隔一分钟向 /home/test.txt 文件写入123
相关参数
crontab -l 列出当前⽤⼾的计划作业
crontab -r 删除当前⽤⼾的所有作业
crontab -e 编辑当前⽤⼾的作业
crontab filename 删除所有作业,并替换为 filename 读取的作业。如果没有指定⽂件, 则使⽤ stdin
/etc/crontab ⽂件的注释中包含了实⽤的语法图。
周期性系统作业在两个位置定义:/etc/crontab ⽂件和 /etc/cron.d/ ⽬录中的⽂件。
要计划周期性系统作业,应始终在 /etc/cron.d ⽬录下创建⾃定义 crontab ⽂件。
通过将⾃定义 crontab ⽂ 件放⼊ /etc/cron.d,可以防⽌在 /etc/crontab 的第三⽅软件包更新时将它覆盖。
需要周期性系统作业的软件包会将其 crontab ⽂件放⼊包含作业条⽬的 /etc/cron.d 中。管理员也使⽤此位置
将相关作业组合到单个⽂件中。
crontab 系统中还包含需要每⼩时、每天、每周和每⽉运⾏得脚本的存储库。这些存储库分别对
应于名为 /etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/ 和 /etc/cron.monthly 的⽬
录。这些⽬录中包含可执⾏的 shell 脚本,⽽不是 crontab ⽂件。
⼀个从 /etc/cron.d/0hourly ⽂件调⽤的名为 run-parts 的命令可以运⾏ /etc/cron.hourly/* 脚
本。run-parts 命令也运⾏每⽇、每周和每⽉的作业,但它是从另⼀个名为 /etc/anacrontab 的
配置⽂件调⽤的。
1,指定在 2023/12/12 09:00 将时间写入 /testmail.txt 文件中
[root@bogon ~]# at -t 202312120900
warning: commands will be executed using /bin/sh
at> date >> /testmail.txt
at>
job 6 at Tue Dec 12 09:00:00 2023
2,指定在每天凌晨4:00将该时间点之前的系统日志信息备份到目录下 /var/log/message,备份后日志文件名显示格式 logfileYY-MM-DD HH-MM
命令
00 04 * * * cp /var/log/messages /var/log/logfile`date +\%F-\%R` | echo logfile`date +\%F-\%R` >> /var/log/messages
~