在日常的 Linux 系统管理和维护中,定时执行任务是非常常见的需求。你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天手动运行这些命令。这时候,Linux 提供了一个强大的工具——cron,它可以帮助我们自动化这些任务。
本文将了解如何使用 cron
定时任务来每天定时执行某个脚本。我们将逐步讲解从设置 cron 任务,到执行定时脚本的流程,并探讨一些高级用法。我们还会举例如何每天在早晨 7 点和下午 3 点运行脚本文件。
cron
?cron
是 Linux/Unix 系统中用于计划任务的守护进程。它允许用户在指定时间自动执行命令或脚本,而无需手动干预。cron
可以用于计划执行重复性任务,例如每天、每周、每月甚至每小时执行的任务。
cron
和 crontab
crontab
文件,来定义属于自己用户的任务计划。系统管理员还可以配置全局 crontab
文件,用于整个系统级别的任务调度。cron
的优势cron
是非常稳定的守护进程,一旦设置正确,它几乎不会出现问题。cron
定时任务要在 Linux 中使用 cron
,我们需要使用 crontab
命令来定义任务计划。接下来,我们一步一步展示如何通过 crontab
设置每天定时在指定的时间执行脚本。
crontab
编辑器 先打开 crontab
文件,进行编辑。执行以下命令:
crontab -e
在输入 crontab -e 回车,如下图:
这将打开当前用户的 crontab
文件。如果你是第一次使用 crontab
,系统可能会提示你选择默认的文本编辑器。常见的选择有 vim
、nano
等,这里默认是vi,所以输入i进入编辑模型如下图:
crontab
的时间格式crontab
文件中的每个任务行都有五个时间字段,它们表示任务执行的时间。格式如下:
* * * * * 命令或是脚本文件(绝对路径)
每个 *
号分别对应以下含义:
*
:分钟(0 - 59)*
:小时(0 - 23)*
:日期(1 - 31)*
:月份(1 - 12)*
:星期几(0 - 6,0 表示星期日)举个例子,如果你想在每天的凌晨 3 点和下午 3 点执行某个脚本,你可以设置如下的 cron
任务:
0 3,15 * * * /path/to/your_script.sh
解释:
0
:表示整点,即 00 分钟执行。3,15
:表示凌晨 3 点和下午 3 点两个时段执行。* * *
:分别表示每天的任意日期、月份和星期几。crontab
编辑完 crontab
文件后,保存并退出(根据你选择的编辑器不同,保存方式可能不同,例如在 vim
中是 :wq
,而在 nano
中是 Ctrl+O
保存,Ctrl+X
退出)。
cron
服务会自动加载并应用新的任务调度配置。
现在,让我们实际设置一个每天定时在凌晨 3 点和下午 3 点执行的脚本示例。
假设我们有一个名为 backup.sh
的脚本,放置在 /home/root/backup.sh
路径下。这个脚本的内容可能如下:
#!/bin/bash
# 定义备份目录
BACKUP_DIR="/home/root/backup"
DATE=$(date +%Y-%m-%d)
# 创建当天的备份目录
mkdir -p $BACKUP_DIR/$DATE
# 复制文件到备份目录
cp -r /var/www/html/* $BACKUP_DIR/$DATE/
# 记录日志
echo "备份完成:$DATE" >> /home/root/backup/backup.log
首先,我们需要确保脚本具有可执行权限。使用以下命令:
chmod +x /home/root/backup.sh
crontab
中添加定时任务接下来,我们在 crontab
中添加定时任务,让该脚本每天在凌晨 3 点和下午 3 点自动运行。打开 crontab
:
crontab -e
添加以下内容:
0 3,15 * * * /home/user/backup.sh
如下图:
保存并退出编辑器。这样一来,cron
会每天在 03:00 和 15:00 运行这个备份脚本。
保存退出后的正常提示。
你可以使用以下命令查看当前用户的 crontab
任务:
crontab -l
如果 cron
工作正常,你应该会看到刚刚添加的定时任务,如下图:
/var/log/syslog;
/var/log/cron;
我这里用的是centos,属于
Red Hat 系列,使用以下命令查看日志:
grep CRON /var/log/cron
我这里是如果 cron
正常执行任务,你会在日志中看到类似以下的条目:
从上图这份 cron
日志中可以看出系统在执行 cron.hourly
任务以及对 crontab
进行编辑和管理。
如果你想删除某个定时任务,只需要再次编辑 crontab
:
crontab -e
找到要删除的行,删除它,然后保存文件。cron
会自动应用更改。如果你只想修改任务的时间,可以直接编辑该任务所在的行,修改时间字段。
cron
用法cron
非常灵活,除了基本的时间调度外,还支持一些高级用法:
*/5 * * * * /path/to/script.sh
0 9-17 * * * /path/to/script.sh
有时你希望将定时任务的输出重定向到某个文件。可以使用 >
将标准输出和错误输出保存到日志文件:
0 3 * * * /path/to/script.sh > /path/to/logfile.log 2>&1
通过 cron
定时任务,我们可以轻松实现自动化任务调度,而无需手动操作。本文介绍了如何在 Linux 中设置 cron
,并且展示了如何每天定时执行脚本的完整流程。无论是简单的任务调度,还是复杂的自动化任务,cron
都能提供稳定可靠的解决方案。