1. atd 和 crond 两个任务管理程序的区别
atd:用于执行一次性的定时任务,即设置任务在某个特定的时间点仅执行一次 ,适合处理不需要重复执行的定时操作,比如在未来某个确切时间执行一个脚本、发送一份文件等场景。
crond:用于执行周期性的定时任务,可按照设定的周期(如每分钟、每小时、每天、每周等)重复执行任务,常用来做系统监控、日志备份、定期数据清理或生成等周期性需求。
对比项 atd crond 任务执行性质 一次性定时任务,任务仅执行一次 周期性定时任务,按周期重复执行 适用场景 未来某个特定时间点执行单次操作,如临时定时发文件、跑脚本 需周期性执行的任务,如日志备份、系统监控、定期数据处理 配置方式 通过 at
、atq
、atrm
等命令配置通过 crontab
命令(编辑用户或系统级定时任务表 )配置任务调度逻辑 提交任务到队列,到指定时间触发执行 依据预设的时间周期规则(分、时、日、月、周等维度组合)循环触发
2. 指定在 2025/08/15 09:00 将时间写入 testmail.txt 文件中
1. 安装 at 软件包
- at命令需要安装
[root@master ~]# yum install at -y
[root@master ~]# at -V # 大写V
at version 3.2.2
2. 启动并配置 atd 服务
- 启动服务
[root@master ~]# systemctl start atd
[root@master ~]# systemctl enable --now atd # 设置开机启动
[root@master ~]# systemctl status atd # 查看状态
3.创建定时任务
使用 at
命令实现,步骤如下:
- 在终端输入
at 09:00 2025-08-15
,回车进入at
任务编辑模式。 - 在编辑模式中输入
date > testmail.txt
,然后按Ctrl + D
保存并退出,这样就设置好了在指定时间将当前时间写入testmail.txt
文件的任务 。
[root@master ~]# at 9:00 2025-08-15
warning: commands will be executed using /bin/sh
at Fri Aug 15 09:00:00 2025
at> date > testmail.txt
at> <EOT>
job 11 at Fri Aug 15 09:00:00 2025
3. 指定每天凌晨 4:00 将该时间点之前的日志信息备份到某个目录下(/var/log/messages ),备份后日志文件名显示格式 logfileYY - MM - DD - HH:MM:SS
1. 配置定时任务
crontab 是 Linux 下实现定时任务的工具,/etc/crontab
是系统级任务配置文件。编辑它来设定凌晨 4 点执行备份:
[root@server ~]# vim /etc/crontab # 编辑系统计划任务
进入文件后,添加定时任务条目。crontab 的时间规则是 分 时 日 月 周
,要凌晨 4 点执行,所以分钟设为 0,小时设为 4,即 0 4 * * *
。执行用户是 root
,执行的命令是把日志文件按要求备份并命名:
0 4 * * * root /bin/cp /var/log/messages /var/log/logfile`date +\%y-\%m-\%d-\%H:\%M:\%S`
反引号`` 表示将引起的内容识别为命令
在crontab系统中%表示换行,需要增加转义符\
2. 测试验证(确保逻辑可行,提前发现问题)
直接等凌晨 4 点验证不高效,可临时修改 crontab 里的时间规则,比如改成 * * * * *
(每分钟执行一次),快速测试任务是否按预期生成备份文件
* * * * * root /bin/cp /var/log/messages /var/log/logfile`date +\%y-\%m-\%d-\%H:\%M:\%S`
测试完后,改回 0 4 * * *
的时间规则,恢复凌晨 4 点执行的需求 。