Cron是Linux/Unix系统中的一个守护进程(daemon),用于在预定时间自动执行指定的命令或脚本。它按照用户设定的时间表(称为"cron表"或"crontab")定期运行任务,非常适合自动化系统维护、备份、监控等周期性任务。
每个用户的cron任务存储在/var/spool/cron
目录下,以用户名命名。系统cron任务通常在/etc/crontab
和/etc/cron.d/
目录中。
crontab文件每行代表一个任务,格式如下:
* * * * * command-to-be-executed
│ │ │ │ │
│ │ │ │ └── 星期几 (0 - 6) (0表示星期日)
│ │ │ └──── 月份 (1 - 12)
│ │ └────── 日 (1 - 31)
│ └──────── 小时 (0 - 23)
└────────── 分钟 (0 - 59)
编辑当前用户的cron任务:
crontab -e
列出当前用户的cron任务:
crontab -l
删除当前用户的所有cron任务:
crontab -r
为指定用户编辑cron任务(需要root权限):
crontab -u username -e
每分钟执行一次:
* * * * * command
每小时的第5分钟执行:
5 * * * * command
每天凌晨2点执行:
0 2 * * * command
每周一上午8:30执行:
30 8 * * 1 command
每月1号中午12点执行:
0 12 1 * * command
每10分钟执行一次:
*/10 * * * * command
工作日(周一到周五)每天下午5点执行:
0 17 * * 1-5 command
Cron还支持一些特殊字符串来简化常见的时间设置:
@reboot
- 系统启动时运行@yearly
或 @annually
- 每年1月1日午夜运行@monthly
- 每月第一天午夜运行@weekly
- 每周日午夜运行@daily
或 @midnight
- 每天午夜运行@hourly
- 每小时开始运行示例:
@daily /path/to/backup.sh
Cron执行任务时使用的环境变量可能与用户登录时的环境不同。建议:
示例:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /path/to/script.sh
Cron任务的输出默认会通过邮件发送给用户。要记录输出到文件:
* * * * * /path/to/command > /path/to/logfile 2>&1
系统cron日志通常位于/var/log/cron
(RHEL/CentOS)或/var/log/syslog
(Debian/Ubuntu)。
chmod +x
)系统管理员可以管理以下位置的cron任务:
/etc/crontab
- 系统范围的crontab文件/etc/cron.d/
- 存放单独的任务文件/etc/cron.hourly/
, /etc/cron.daily/
, /etc/cron.weekly/
, /etc/cron.monthly/
- 按周期执行的脚本目录systemctl status cron
(或crond
)通过合理使用cron,可以大大提高Linux系统的自动化程度和管理效率。