Linux计划任务的使用

本文介绍了Linux系统中用于计划任务的at和cron命令的使用方法,包括命令参数、时间格式以及示例。at命令用于一次性任务,而cron适用于定期任务。文中还提到了权限控制文件如at.allow和cron.allow,并展示了如何设置和管理计划任务,以及查看和调试cron日志。
摘要由CSDN通过智能技术生成

一、计划任务

1.1 at命令的工作过程

at命令用于安排一次性任务,它允许用户指定一个时间点来执行一个或多个命令。

1.1.1 定时执行命令脚本的命令

  • /etc/at.allow:如果存在,只有文件中列出的用户可以使用at命令。

  • /etc/at.deny:黑名单文件,如果存在,文件中列出的用户不能使用at命令。

  • 如果at.allowat.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工作过程

  1. /etc/cron.allow:如果存在,只有文件中列出的用户可以使用crontab命令。

  2. /etc/cron.deny:黑名单文件,如果存在,文件中列出的用户不能使用crontab命令。

  3. 如果cron.allowcron.deny都不存在,那么默认只有root用户可以使用crontab命令。

1.2.1 系统服务状态检查

  • systemctl status crond:检查cron服务(crond)的状态。

1.2.2 日志文件位置

  • /var/log/croncron相关的日志文件通常存放在这里。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值