1.atd和crond两个任务管理程序的区别
at
命令
用于在特定时间执行一次性任务,任务完成后自动终止,不会重复执行。
适用场景:
- 计划今晚 10 点自动备份文件
- 明天早上 8 点发送一封提醒邮件
- 临时需要在某个未来时间点运行一个脚本
at
的权限
受 /etc/at.allow
和 /etc/at.deny
文件控制:
- 若
at.allow
存在,只有文件中列出的用户可使用at
。 - 若
at.allow
不存在,at.deny
中列出的用户被禁止使用at
(默认at.deny
为空,即所有用户可使用)。
crond
服务
用于周期性、重复性地执行任务,按照预设的时间规则(如每天、每周、每月)重复运行,直到手动删除任务。
适用场景:
- 每天凌晨 3 点清理系统日志
- 每周五下午 5 点生成周报
- 每月 1 日自动更新系统软件
crond
的权限
受 /etc/cron.allow
和 /etc/cron.deny
文件控制,规则与 at
相同:
- 仅允许
cron.allow
中的用户使用crontab
,或禁止cron.deny
中的用户使用。
2.指定在2024/04/15 09: 00 将时间写入testmail.txt文件中
这里明确说明了时间,所以博主这里选用:单一执行的例行性任务–at(一次性)
[root@master backup]# yum install atd -y #先下载 [root@master backup]# systemctl enable --now atd #设置开机自启动
这里博主介绍两种方法:
第一种
1.先写一个脚本负责把时间写入文件中
[root@master ~]# vim test2.sh #创建并编写脚本文件 #文件内容 #!/bin/bash date >> testmail.txt
2.调用atd服务
[root@master ~]# at 9:00 2025-07-18 warning: commands will be executed using /bin/sh at Fri Jul 18 09:00:00 2025 at> bash test2.sh #调用test2.sh文件 at> <EOT> #crtl+d退出 job 10 at Fri Jul 18 09:00:00 2025
3.查看一下atd任务
[root@master ~]# atq 10 Fri Jul 18 09:00:00 2025 a root [root@master ~]# at -l 10 Fri Jul 18 09:00:00 2025 a root
第二种
[root@master ~]# echo "date >> testmail.txt" | at 9:01 2025-7-18 #为了区分上一种把时间改为9:01
warning: commands will be executed using /bin/sh
job 11 at Fri Jul 18 09:01:00 2025
#查看一下让任务
[root@master ~]# atq
10 Fri Jul 18 09:00:00 2025 a root
11 Fri Jul 18 09:01:00 2025 a root
3.指定每天凌晨4:00将该时间点之前的日志信息备份到一个目录下(/var/log/messages),备份后日志文件名显示格式logfileYY-MM-DD-HH:MM:SS
这里说了每天,所以是一个周期任务需要用到crontd服务
先检查一下是否有crontd服务
[root@master ~]# rpm -qa | grep cron crontabs-1.11-24.oe2203sp4.noarch cronie-1.6.1-3.oe2203sp4.x86_64
没有的话就下载一下
[root@master ~]# yum install crontabs -y
然后检查crontd服务的状态确保是开启
[root@master ~]# systemctl status crond [root@master ~]# systemctl start crond
闯将一个目录,来存放日志信息
[root@master ~]# mkdir backup
在 Linux 系统里,
vim /etc/crontab
这个命令的作用是借助 Vim 编辑器来对系统级的定时任务配置文件/etc/crontab
进行编辑。[root@master ~]# vim /etc/crontab #在文件最后一行写入 0 4 * * * root /bin/cp /var/log/messages /root/backup/logfile`date +\%Y-\%m-\%d-\%H-\%M-\% #注意 # 反引号`` 表示将引起的内容识别为命令 # 在crontab系统中%表示换行,需要增加转义符\
测试:为了方便测试我改为一分钟就拷贝一次
[root@master ~]# cd backup [root@master backup]# ls ------------------------------------------------------------------------------------------- #等两分钟 [root@master backup]# ls #有结果说明结果正确 logfile logfile2025-07-17-20-35-01 logfile2025-07-17-20:36:01
4.对crontab 时间格式的练习(附答案)
1. 每分钟执行命令
* * * * *
2. 每小时执行
0 * * * *
3. 每天凌晨3点半和12点半执行脚本
30 3,12 * * *
4. 每隔6小时,相当于6,12,18,24点半执行脚本
30 */6 * * *
5. 30代表半点,8-18/2表示早上8点到下午18点之间每隔2小时执行脚本
30 8-18/2 * * *
6. 每天晚上9点30重启nginx
30 21 * * * /usr/bin/systemctl restart nginx
7. 每月1和10号凌晨4点45执行脚本
45 4 1,10 * *
8. 每周六和周日凌晨1点10分执行命令
10 1 * * 6,7
9. 每天18点到23点之间,且每隔30分钟执行一次
*/30 18-23 * * *
10. 每隔一小时执行一次
0 */1 * * *
11. 在4月份的周一到周三的上午11点执行脚本
0 11 * 4 1-3
12. 每天早上7点到上午11点且每2小时执行一次
0 7-11/2 * * *
13. 每天6点执行脚本
0 6 * * *
14. 每周六凌晨4点执行
0 4 * * 6
15. 每周六凌晨4点05执行
5 4 * * 6
16. 每天8:40执行
40 8 * * *
17. 在每天10:31且每隔2小时执行一次
31 10-23/2 * * *
18. 每周一到周五2:00执行
0 2 * * 1-5
19. 每周一到周五8:00和9:00执行
0 8,9 * * 1-5
20. 每天10:00,16:00执行
0 10,16 * * *