Linux 定时任务全解析:atd 与 crond 的区别及实战案例(含日志备份 + 时间写入)

发布于:2025-07-19 ⋅ 阅读:(22) ⋅ 点赞:(0)

1. atd 和 crond 两个任务管理程序的区别

  • atd:用于执行一次性的定时任务,即设置任务在某个特定的时间点仅执行一次 ,适合处理不需要重复执行的定时操作,比如在未来某个确切时间执行一个脚本、发送一份文件等场景。

  • crond:用于执行周期性的定时任务,可按照设定的周期(如每分钟、每小时、每天、每周等)重复执行任务,常用来做系统监控、日志备份、定期数据清理或生成等周期性需求。

    对比项 atd crond
    任务执行性质 一次性定时任务,任务仅执行一次 周期性定时任务,按周期重复执行
    适用场景 未来某个特定时间点执行单次操作,如临时定时发文件、跑脚本 需周期性执行的任务,如日志备份、系统监控、定期数据处理
    配置方式 通过 atatqatrm 等命令配置 通过 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 命令实现,步骤如下:

  1. 在终端输入 at 09:00 2025-08-15 ,回车进入 at 任务编辑模式。
  2. 在编辑模式中输入 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 点执行的需求 。


网站公告

今日签到

点亮在社区的每一天
去签到