Cron 表达式可视化
什么是 Cron
Cron 是类 Unix 系统上的一个时间表进程(daemon),用于在固定时间、日期、间隔运行程序或脚本。它常用于系统管理任务,如备份、系统维护和其他周期性任务。
Cron 基本概念
Cron 表(Crontab):保存定时任务的文件。
Cron 表达式:定义任务何时运行的格式,由五个时间字段和一个命令字段组成。
Cron 表达式格式
* * * * * command_to_execute | |
- - - - - | |
| | | | | | |
| | | | +---- 星期几 (0 - 7) (星期天为0或7) | |
| | | +------ 月份 (1 - 12) | |
| | +-------- 日期 (1 - 31) | |
| +---------- 小时 (0 - 23) | |
+------------ 分钟 (0 - 59) |
预定义 Cron 时间格式
@reboot:在每次重启时运行 | |
@yearly 或 @annually:每年运行一次,相当于 0 0 1 1 * | |
@monthly:每月运行一次,相当于 0 0 1 * * | |
@weekly:每周运行一次,相当于 0 0 * * 0 | |
@daily:每天运行一次,相当于 0 0 * * * | |
@hourly:每小时运行一次,相当于 0 * * * * |
安装 Cron
Ubuntu 系统通常预装了 Cron。如果没有安装,可以使用以下命令安装:
sudo apt update | |
sudo apt install cron |
安装完成后,启动 Cron 服务并设置开机自启:
Copy code | |
sudo systemctl enable cron | |
sudo systemctl start cron |
使用 Crontab
编辑 Crontab 文件
要编辑当前用户的 Crontab 文件,使用以下命令:
crontab -e |
这将打开一个文本编辑器,可以在其中添加、修改或删除定时任务。
查看 Crontab 文件
要查看当前用户的 Crontab 任务列表,使用以下命令:
crontab -l |
删除 Crontab 文件
要删除当前用户的 Crontab 文件,使用以下命令:
crontab -r |
添加 Cron 任务示例
假设我们有一个脚本 /home/user/backup.sh,希望每天凌晨 2 点运行一次。可以在 Crontab 中添加以下行:
0 2 * * * /home/user/backup.sh |
使用日志记录 Cron 任务输出
默认情况下,Cron 任务的输出(包括标准输出和错误输出)不会被记录。为了记录输出,可以将其重定向到日志文件。例如:
0 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1 |
环境变量
Cron 运行的环境与用户的登录环境不同。可以在 Crontab 文件的顶部设置必要的环境变量。例如:
SHELL=/bin/bash | |
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
Crontab 文件示例
以下是一个完整的 Crontab 文件示例:
SHELL=/bin/bash | |
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | |
# 每天凌晨 2 点运行备份脚本 | |
0 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1 | |
# 每周日凌晨 3 点运行清理脚本 | |
0 3 * * 0 /home/user/cleanup.sh >> /home/user/cleanup.log 2>&1 | |
管理系统级别的Cron任务 | |
系统级别的Cron任务通常保存在 /etc/crontab 文件中,或者分别存放在 /etc/cron.d/ 目录中的独立文件中。 | |
编辑系统级别的Crontab文件 | |
要编辑系统级别的Crontab文件,使用以下命令: | |
sudo nano /etc/crontab |
文件格式类似于用户 Crontab,但包含一个额外的字段,指定任务的用户。例如:
SHELL=/bin/sh | |
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | |
# 分钟 小时 日期 月份 星期 用户 命令 | |
0 2 * * * root /usr/local/bin/system_backup.sh |
定期运行的任务目录
Ubuntu 系统有一些特殊的目录,用于存放定期运行的任务脚本:
/etc/cron.daily/:每天运行 | |
/etc/cron.weekly/:每周运行 | |
/etc/cron.monthly/:每月运行 | |
/etc/cron.hourly/:每小时运行 | |
在这些目录中添加脚本,它们将按照相应的时间间隔自动运行。 |