Linux系统中的计划任务主要通过两种机制实现:
Cron是Linux系统中最重要的计划任务服务,其工作原理如下:
crond
服务在后台持续运行,检查是否有需要执行的任务/etc/crontab
/var/spool/cron/
目录下的用户文件/etc/cron.d/
, /etc/cron.hourly/
, /etc/cron.daily/
等/var/log/cron
)At用于调度一次性任务:
atd
服务处理at任务/var/spool/at/
目录中crontab
是 Linux 系统中用于管理计划任务(cron jobs)的核心命令,它允许用户创建、编辑、列出和删除 cron 任务。以下是 crontab 命令的完整用法指南。
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
-e
)编辑当前用户的 cron 任务表:
crontab -e
特点:
-l
)显示当前用户的 cron 任务:
crontab -l
高级用法:
# 显示特定用户的 cron 任务(需要 root 权限)
crontab -u username -l
-r
)删除当前用户的所有 cron 任务:
crontab -r
安全选项:
# 交互式删除(询问确认)
crontab -i -r
-u
)以 root 身份管理其他用户的 cron 任务:
crontab -u username -e # 编辑指定用户的任务
crontab -u username -l # 列出指定用户的任务
crontab -u username -r # 删除指定用户的任务
用指定文件的内容替换当前 cron 任务:
crontab filename
示例:
# 从 my_cron_jobs 文件导入任务
crontab my_cron_jobs
在 crontab 文件中:
#
开头的行是注释可以在 crontab 文件顶部设置环境变量:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=user@example.com
除了标准的时间格式,cron 还支持一些特殊字符串:
@reboot # 系统启动时运行
@yearly # 每年一次 (0 0 1 1 *)
@annually # 同 @yearly
@monthly # 每月一次 (0 0 1 * *)
@weekly # 每周一次 (0 0 * * 0)
@daily # 每天一次 (0 0 * * *)
@hourly # 每小时一次 (0 * * * *)
@midnight # 同 @daily
默认情况下,cron 会通过邮件发送任务输出,可以重定向到文件:
* * * * * /path/to/command > /var/log/command.log 2>&1
在 cron 命令中使用 %
需要转义:
0 1 * * * /path/to/command --day=`date +\%d` --month=`date +\%m`
/var/spool/cron/
或 /var/spool/cron/crontabs/
/etc/crontab
和 /etc/cron.d/
/etc/cron.hourly/
, /etc/cron.daily/
等目录/etc/cron.allow
- 允许使用 cron 的用户列表/etc/cron.deny
- 禁止使用 cron 的用户列表如果两个文件都不存在,通常只有 root 可以使用 cron。
1.每天凌晨备份:
0 0 * * * /usr/bin/rsync -a /home /backup/home
2.每5分钟检查一次服务:
*/5 * * * * /usr/local/bin/check_service.sh
3.工作日工作时间每小时间隔执行:
0 9-17 * * 1-5 /usr/local/bin/hourly_report.sh
4.每月第一天发送报告:
0 0 1 * * /usr/local/bin/monthly_report.sh
5.系统重启后执行:
@reboot /usr/local/bin/startup_script.sh
6.为用户natasha配置一个定时计划任务,在每天14:23分执行/bin/echo “RHCSA”
[root@localhost ~]# crontab -u natasha -e
no crontab for natasha - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -u natasha -l
23 14 * * * /bin/echo "RHCSA"
[root@localhost ~]#
拓展:仅允许natasha和root能创建计划任务
[root@localhost ~]# vim /etc/cron.allow
[root@localhost ~]# cat /etc/cron.allow
root //cron.allow相当于计划任务白名单,优先级要高于deny黑名单
natasha
[root@localhost ~]# su - ftx
Last login: Fri Apr 18 11:00:32 CST 2025 on pts/0
[ftx@localhost ~]$ crontab -e
You (ftx) are not allowed to use this program (crontab)
See crontab(1) for more information
[ftx@localhost ~]$
7.创建一个计划任务,要求每月 1~5 号每天下午 2 点到 5 点,每隔 10 分钟执行 /bin/echo “I Love Galaxy”。
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
*/10 14-17 1-5 * * /bin/echo "l Love Galaxy"
[root@localhost ~]#
8.上午8点到晚上9点之间每两分钟一次将当前日期和时间附加到/home/galaxy/my_first_cron_job.txt。
该作业只能在周一到周五运行,周六或周日不能运行。
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
*/2 8-9 * * 1-5 data > /home/galaxy/my_first_cron_job.txt
[root@localhost ~]#
crontab -l > cron_backup.txt
)