17_计划任务:at和crontab命令详解
系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客
文章目录
- at命令
- crontab命令
计划任务是一种定时执行的任务,在特定的时间点或时间间隔内自动执行预定的操作。
at命令
at
命令用于一次性计划任务,它不能跨越零点。
安装at命令
yum install -y at.x86_64
at命令常用选项
-l
:列出当前用户的所有at任务。-t yyyymmddHHMM
:指定在具体某年某月某日某时某分安装一个at任务。-f /tmp/job.txt 11:40
:指定任务文件,在文件中编写需要执行的任务具体指令。-c jobid
:查看一个at任务的具体内容。-r jobid
:删除at任务。
示例
- 添加一个今天内的任务:
at 11:38
hello at
wall "hello wall"
<EOT>
- 指定在某天某时的计划任务:
at -t 202207290500
find / -type f -a -size 0 -exec rm -rf {} \;
reboot
<EOT>
- 列出at的任务列表:
atq
- 查看具体某个任务:
at -c jobId
crontab命令
crontab
命令用于循环计划任务。
安装cronie
yum install -y cronie
crontab命令常用选项
-e
:编辑任务计划,类似于vi/vim操作方式。-l
:查看计划任务。-u <username>
:指定用户。-r
:删除计划任务。
示例
- 以当前用户身份创建计划任务:
crontab -e
- 以指定的用户身份创建计划任务,只有root用户拥有此权限:
crontab -u <username> -e
- 查询当前用户的所有计划任务:
crontab -l
- 查询指定用户的计划任务:
crontab -u <username> -l
- 删除当前用户的所有计划任务:
crontab -r
- 删除用户的计划任务:
crontab -u root -r
- 删除uplooking用户的所有计划任务(只有root用户可以删除和查看其他用户的任务):
crontab -u uplooking -r
编写计划任务格式
脚本中每行的开头是时间设置,然后是要执行的命令或脚本。
- 分钟(0 - 59)
- 小时(0 - 23)
- 日期(1 - 31)
- 月份(1 - 12)或英文缩写(jan, feb, mar, apr, …)
- 星期几(0 - 6)或英文缩写(sun, mon, tue, wed, thu, fri, sat)
示例:
-
每分钟执行一次命令:
* * * * * command
-
每隔两分钟执行一次命令:
*/2 * * * * command
-
从30分到50分之间,每隔5分钟执行一次命令:
30-50/5 * * * * command
-
每年1月1日22点执行任务计划:
00 22 1 1 * command
-
每个星期一、三、五的8点、10点、12点执行任务计划:
00 08,10,12 * * 1,3,5 command
-
每月10到15号的08:30执行任务计划:
30 08 10-15 * * command
示例
- 每隔一分钟,将当前的日期信息追加到
/tmp/mydate
文件中:
crontab -e
* * * * * date +"\%F \%H:\%M:\%S" >> /tmp/mydate
- 每隔一分钟,将当前的日期和日历追加到
/home/mycal
文件中:
crontab -e
* * * * * date +"\%F" >> /tmp/mycal; cal >> /tmp/mycal
- 每天的22点钟,删除
/tmp
目录下的所有文件:
crontab -e
01 22 * * * rm -rf /tmp/*
- 每逢星期一下午5:50,将
/etc
目录下的所有目录和文件归档并压缩为文件/opt/etcBackup.tar.gz
:
crontab -e
50 17 * * 1 tar -czf /op/etcBackup.tar.gz /etc/
- 在每周六的凌晨3:15执行
/usr/local/check.sh
,并将标准输出和标准错误输出到/dev/null
设备:
crontab -e
15 03 * * 6 /usr/local/check.sh &> /dev/null
- 在每个月的1号,零点十五执行重启网络服务:
crontab -e
15 00 01 * * systemctl restart network
总结:
at
命令用于一次性计划任务,不跨越零点。crontab
命令用于循环计划任务。