一、计划任务
1.1 at命令的工作过程
at
命令用于安排一次性任务,它允许用户指定一个时间点来执行一个或多个命令。
1.1.1 定时执行命令脚本的命令
-
/etc/at.allow
:如果存在,只有文件中列出的用户可以使用at
命令。 -
/etc/at.deny
:黑名单文件,如果存在,文件中列出的用户不能使用at
命令。 -
如果
at.allow
和at.deny
都不存在,那么默认只有root
用户可以使用at
命令。
1.1.2 参数
-
-m
:任务完成后发送邮件给用户,即使没有标准输出。 -
-l
:列出用户所有的at
作业(别名atq
)。 -
-d
:删除一个at
作业(别名atrm
)。 -
-v
:使用详细的时间格式列出at
作业。 -
-c
:列出作业的实际命令内容。 -
-f
:从指定的文件中读取命令来安排作业。
1.1.3 时间格式
-
HH:MM
:在今天的指定小时和分钟执行命令。如果时间已过,则安排在第二天。 -
HH:MM YYYY-MM-DD
:强制在指定的年月日的特定时间执行命令。 -
now + X minutes/hours/days/weeks
:从现在开始,经过X分钟、小时、天或周后执行命令。
1.1.4 示例
1.1.4.1 在系统中设定延迟任务要求如下:
-
在系统中建立easylee用户,设定其密码为easylee
-
延迟任务由root用户建立
-
要求在5小时后备份系统中的用户信息文件到/backup中
-
确保延迟任务是使用非交互模式建立(默认为非交互式)
-
确保系统中只有root用户和easylee用户可以执行延迟任务的设置
[root@Rocky8-node1 ~]# useradd easylee #添加用户 [root@Rocky8-node1 ~]# echo easylee | passwd --stdin easylee #设置密码 Changing password for user easylee. passwd: all authentication tokens updated successfully. [root@Rocky8-node1 ~]# vim backup.sh #再root用户下创建备份脚本 #!/bin/bash echo '开始备份用户信息文件' [ -d /backup ] || mkdir /backup cp /etc/passwd /backup echo '备份结束' [root@Rocky8-node1 ~]# chmod +x /root/backup.sh #增加执行权限 [root@Rocky8-node1 ~]# cat >> /etc/at.allow << EOF #创建白名单 > root > easylee > EOF [root@Rocky8-node1 ~]# systemctl start atd [root@Rocky8-node1 ~]# systemctl is-active atd #确保服务启动 active [root@Rocky8-node1 ~]# at now + 5 hours -f /root/backup.sh #创建任务,5小时后执行 warning: commands will be executed using /bin/sh #该警告是at用的是/bin/sh解释器 job 1 at Wed Apr 24 14:50:00 2024 [root@Rocky8-node1 ~]# at -l #查看任务列表 1 Wed Apr 24 14:50:00 2024 a root
1.2 crontab工作过程
-
/etc/cron.allow
:如果存在,只有文件中列出的用户可以使用crontab
命令。 -
/etc/cron.deny
:黑名单文件,如果存在,文件中列出的用户不能使用crontab
命令。 -
如果
cron.allow
和cron.deny
都不存在,那么默认只有root
用户可以使用crontab
命令。
1.2.1 系统服务状态检查
-
systemctl status crond
:检查cron
服务(crond
)的状态。
1.2.2 日志文件位置
-
/var/log/cron
:cron
相关的日志文件通常存放在这里。
1.2.3 用户定义计划任务的文件所在目录
-
/var/spool/cron/
:用户定义的计划任务(crontab文件)存放在这个目录下。
1.2.4 crontab命令参数
-
-u <user>
:指定要管理其crontab
的用户。 -
-e
:编辑指定用户的crontab
文件。 -
-l
:列出指定用户的crontab
中的定时任务。 -
-r
:删除指定用户的crontab
。 -
-i
:在删除crontab
前提示确认。 -
-n <host>
:设置运行用户crontab
的主机。 -
-c
:获取当前配置为运行用户crontab
的主机。 -
-T <file>
:测试crontab
文件的语法。 -
-s
:处理SELinux上下文。 -
-V
:打印cron
守护进程的版本信息。 -
-x
:使用指定的掩码启用调试功能。
1.2.5 系统计划任务
-
/etc/crontab
:系统级别的计划任务配置文件。
1.2.6 时间格式
-
分钟:0-59
-
小时:0-23
-
日:1-31
-
月:1-12 或者使用月份的英文缩写(jan, feb, mar, apr ...)
-
星期:0-6 或者使用星期的英文缩写(sun, mon, tue, wed, thu, fri, sat)
注意:计划任务的五个“*”分别代表 * * * * * 分 时 日 月 周 0-59 0-23 1-31 1-12 0-7(0或7代表周天) */num 代表频率,每几分、每几时、每几日、每几月、每几周(具体按看*位置) , 代表时间间隔,例如周1,3,5 为 * * * * 1,3,5 - 例如每月1-5号 * * 1-5 * * 示例:
1.2.6.1 特殊符号
-
*
:任何时间。 -
,
:列表中的值。 -
-
:范围。 -
/
:起始时间开始触发,然后每隔指定时间触发一次。
1.2.6.2 示例
一、练习 1、每周1-5的晚上9:00执行任务: 0 21 * * 1-5 command 2、每月1号的早上8:30执行任务: 30 8 1 * * command 3、周一到周五每天17:00执行任务: 0 17 * * 1-5 command 二、应用 1、root用户每天早上7:50开启sshd服务,晚上22:50关闭: 50 7 * * * systemctl start sshd 50 22 * * * systemctl stop sshd 2、每周六的7:30重启httpd服务: 30 7 * * 6 systemctl restart httpd 3、普通用户每周日晚上23:55复制/etc/passwd到/tmp,保存为pwd.txt文件: 55 23 * * 0 cp /etc/passwd /tmp/pwd.txt.`date +%F`
1.2.7 con基本操作
1.2.7.1 设置计划任务
-
使用
crontab -e
命令编辑当前用户的crontab
。 -
使用
crontab -l
命令列出当前用户的crontab
。
1.2.7.2 删除计划任务
-
使用
crontab -r
命令删除当前用户的crontab
。 -
直接编辑
crontab
文件并删除相关行。
1.2.7.3 查看cron的日志
-
使用
tail -f /var/log/cron
命令实时查看日志。
1.2.7.4 crontab文件位置
-
系统级别的
crontab
文件位于/etc/crontab
。 -
用户级别的
crontab
文件位于/var/spool/cron/
,以用户名命名。
1.2.7.5 anacron
-
anacron
用于处理在系统停机期间错过的周期性任务。 -
配置文件位于
/etc/anacrontab
。
1.2.7.6 注意事项
-
编辑
/var/spool/cron/
下的文件可以绕过crontab
的语法检查,但可能不会执行。 -
crontab
会进行语法校验,确保时间格式正确。
1.2.8 在系统中设定定时任务并优化定时任务
-
每天凌晨4点显示系统的根设备使用信息并以邮件的形式发送到root邮箱中
-
确保此任务为系统定时任务
[root@Rocky8-node1 ~]# vim disk.sh #!/bin/bash disk=$(df -h / | tail -1) echo "根设备使用情况:$disk" | mail -s "系统根设备使用情况" root [root@Rocky8-node1 ~]# chmod +x disk.sh [root@Rocky8-node1 ~]# crontab -e #添加计划任务 crontab: installing new crontab [root@Rocky8-node1 ~]# crontab -l #查看 0 4 * * * /root/disk.sh [root@Rocky8-node1 ~]# systemctl start crond [root@Rocky8-node1 ~]# systemctl is-active crond.service #确保服务开启 active