CentOS7.9 自动化定时任务管理

642 阅读4分钟

Vmware虚拟机中安装CentOS7

CentOS 7 切换yum源为阿里云

系统定时任务 —— crontab

一、什么是定时任务?

计划任务用于执行周期性操作,例如:

  • 凌晨3点备份数据库
  • 每天晚上23点开启网站活动接口
  • 日志文件切割、系统信息采集等

使用场景:

  1. 系统级任务:清理临时文件、日志分割等。
  2. 用户级任务:同步时间、备份配置文件、数据库备份等。

二、安装 crontabs 并启用服务

# 安装 crontabs
yum install -y crontabs

# 设置开机启动
systemctl enable crond

# 启动 cron 服务
systemctl start crond

# 查看状态
systemctl status crond

三、crontab 配置文件说明

文件路径说明
/var/spool/cron/每个用户的 crontab 文件(以用户名命名)
/etc/crontab系统级 crontab 配置文件
/etc/cron.d/存放自定义的 crontab 文件
/etc/cron.hourly//etc/cron.daily//etc/cron.weekly//etc/cron.monthly/分别对应每小时、每天、每周、每月自动执行的脚本

四、crontab 时间格式详解

cron 表达式由五个字段组成,表示时间点:

*     *     *     *     *
分    时    日    月    星期

每个字段代表一个时间单位,取值如下:

字段取值范围
分钟0 - 59
小时0 - 23
日期1 - 31
月份1 - 12
星期0 - 6(0 或 7 表示星期天)

支持的操作符:

  • *:任意值(如 * 在分钟位表示“每一分钟”)
  • -:范围(如 5-7 表示从第5到第7)
  • ,:多个不连续值(如 1,3,5 表示1、3、5)
  • /n:每隔 n 单位时间(如 */10 表示每10分钟)

五、常用命令

crontab -e      # 编辑当前用户的定时任务
crontab -l      # 查看当前用户的定时任务
crontab -r      # 删除当前用户的定时任务
crontab -u 用户名 -l   # 查看指定用户的定时任务

六、crontab 示例

crontab -e
  • 输入以下命令
# 1:每隔1分钟执行一次,将当前时间写入 /tmp/cron_test.log 文件中
# 输入 ` tail -f /tmp/cron_test.log `查看
* * * * * echo "任务执行于:$(date +%Y-%m-%d\ %H:%M:%S)" >> /tmp/cron_test.log

# 2:每隔 20 分钟执行一次关机命令
*/20 * * * * /sbin/shutdown -h now

# 3:每天早上10点重启系统
0 10 * * * root reboot

# 4:每晚21:30重启 smb 服务
30 21 * * * /etc/init.d/smb restart

# 5:每月1、6、25日的4:45重启 smb 服务
45 4 1,6,25 * * /etc/init.d/smb restart

一次性任务管理 —— at 命令

一、安装 at 工具

yum install -y at

二、启动 atd 服务

systemctl start atd       # 启动服务
systemctl enable atd      # 开机自启
systemctl status atd      # 查看状态

三、at 命令语法

at [option] TIME

常用选项:

选项说明
-V显示版本信息
-latq列出当前队列中的作业
-datrm删除指定作业
-c查看具体作业内容
-f <file>从文件中读取任务
-m强制发送邮件通知任务完成情况

时间格式示例:

格式说明
HH:MM当天该时间执行,若已过则次日执行
HH:MM YYYY-MM-DD指定日期和时间
now + 5 minutes当前时间加5分钟
tomorrow明天同一时间
noonmidnightteatime(4pm)特殊时间点

四、at 使用示例

示例1:1分钟后重命名目录(需先创建原目录)

mkdir /tmp/ca2

cd /tmp

ls
  • 设置1分钟后执行重命名:
at now + 1 minute
  • 输入以下命令
mv /tmp/ca2 /tmp/at2

Ctrl+D 保存退出


示例2:执行多个命令(创建文件、输出内容)

at now + 2 minutes

输入:

echo "This is a test file" > /tmp/test_at.txt
touch /tmp/file1.txt /tmp/file2.txt

Ctrl+D 保存退出。


示例3:从文件执行任务

创建一个脚本文件 atcmd

vi atcmd

写入以下内容:

mkdir cd1
mkdir cd2
mv cd1 cd
mv cd2 cd22
pwd

执行:

at -f atcmd now + 1 minute

示例4:强制发送邮件提醒任务完成

at -m now + 1 minute

输入命令后退出,即使没有输出也会收到邮件通知。

示例5:查看任务列表

at -l
# 或者
atq

示例6:设置白名单允许用户使用 at (可选)

创建 /etc/at.allow 文件并添加允许用户:

vim /etc/at.allow

添加:

xingxing

保存后,只有超级用户和白名单中的用户可以使用 at

注意:黑名单使用 /etc/at.deny 文件。

  • 最后结果查看

图片.png


总结

功能工具命令示例说明
定时任务crontabcrontab -e编辑用户的定时任务列表
crontab -l列出用户的当前定时任务
一次性任务atat now + 5 minutes安排一个在5分钟后执行的一次性任务
查看任务crontabcrontab -l查看当前用户的所有定时任务
atatq列出所有等待执行的一次性任务
删除任务crontabcrontab -r删除当前用户的所有定时任务
atatrm [job_number]根据任务编号删除指定的一次性任务