《从一次性任务到周期性调度:Linux 定时任务(atd/crond)全攻略》

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 * * *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值