cron 与 crontab
服务大多数 Linux 发行版
cron 是经典的 Unix 守护进程,用于按计划运行命令。每个用户都有一个通过 crontab -e 编辑的 crontab 文件,其中的每一行包含五个时间字段(分、时、日、月、星期),后跟要执行的命令。系统任务位于 /etc/crontab 和 /etc/cron.d/ 中。
1时间字段
'30 2 * * *' 表示每天 02:30;'*/10 * * * *' 表示每十分钟;'0 9 * * 1' 表示每周一 09:00。星期字段中的 0 和 7 都表示星期日。
2系统文件
/etc/cron.d/ 和 /etc/crontab 中的文件在时间和命令之间多了一个字段,即用户名。像 /etc/cron.daily 这样的目录则包含每天运行一次的脚本。
3常见陷阱
cron 在极简的环境变量下运行:请使用完整路径或在 crontab 中设置 PATH。命令输出会被发送邮件给所有者或被丢弃;请将其重定向到日志文件。% 字符在 crontab 行中具有特殊含义,必须转义为 \%。
4systemd 定时器
在使用 systemd 的发行版中,.timer 单元是一种替代方案,支持将日志记录到 journal、随机延迟以及补运行错过的任务(Persistent=true)。
如何添加每日任务
- 打开你的 crontab:
crontab -e - 添加一行,例如:30 2 * * *
/usr/local/bin/backup.sh>>/var/log/backup.log2>&1 - 保存并退出;cron 会自动加载更改。
- 列出任务:
crontab -l
注意事项
crontab -r会直接删除整个 crontab,且不会进行提示。- 在安排计划任务之前,请使用相同的用户手动测试该命令。
相关文章
- systemd 单元与 systemctl什么是 systemd 单元、常见的单元类型,以及如何使用 systemctl 启动、停止、启用和检查服务。
- logrotatelogrotate 的作用、/etc/logrotate.conf 和 /etc/logrotate.d 中的配置原理,以及如何安全地测试规则。
- journalctl 与 systemd 日志如何使用 journalctl 读取日志、检查日志占用的空间大小,并通过 --vacuum 选项安全地缩减日志大小。
资料来源
- crontab(5) man7.org
- crontab(5) (Debian) manpages.debian.org
- systemd.timer(5) man7.org
最后审核: