在Linux系统中,一次性任务和周期性任务是两种常见的任务调度方式,分别通过不同的工具实现。以下是详细说明:
一次性任务
用于执行一次后立即结束的任务,常用工具为 at
和 batch
。
at
命令
功能:在指定时间运行一次任务。
安装(部分系统需手动安装):
sudo apt-get install at # Debian/Ubuntu sudo yum install at # CentOS/RHEL
常用操作:
添加任务:
echo "command" | at 14:30 2023-12-31 # 指定具体时间 echo "command" | at now + 2 hours # 2小时后执行
查看任务队列:
atq
删除任务(通过任务ID):
atrm <任务ID>
batch
命令
功能:在系统负载较低时执行一次性任务(基于
at
实现)。示例:
echo "command" | batch
周期性任务
用于定期重复执行的任务,主要通过 cron 实现。
Cron 系统
- 核心组件:
cron
守护进程:后台服务,负责执行计划任务。crontab
命令:用户管理自己的任务配置文件。
- 配置文件位置:
- 用户级:
/var/spool/cron/<用户名>
(通过crontab -e
编辑)。 - 系统级:
/etc/crontab
或/etc/cron.d/
(需root权限)。
- 用户级:
Crontab 语法
基本格式:
* * * * * <命令> │ │ │ │ │ │ │ │ │ └── 星期几 (0-7, 0和7均为周日) │ │ │ └──── 月份 (1-12) │ │ └────── 日 (1-31) │ └──────── 小时 (0-23) └────────── 分钟 (0-59)
特殊字符:
*
:任意值。,
:分隔多个时间点(如1,3,5
)。-
:范围(如1-5
)。*/n
:每隔n单位(如*/10
表示每10分钟)。
示例:
0 3 * * * /backup.sh # 每天凌晨3点执行 */5 * * * * /monitor.sh # 每5分钟执行 0 0 1 * * /report.sh # 每月1日午夜执行
Crontab 管理命令
编辑当前用户的任务:
crontab -e
查看任务列表:
crontab -l
删除所有任务:
crontab -r
系统级Cron
直接编辑
/etc/crontab
或添加脚本到以下目录:/etc/cron.hourly/ # 每小时 /etc/cron.daily/ # 每天 /etc/cron.weekly/ # 每周 /etc/cron.monthly/ # 每月
注意事项
- 环境变量问题:Cron任务默认使用最小环境变量,建议使用绝对路径或在脚本中设置变量。
- 日志查看:Cron任务日志通常位于
/var/log/cron
或/var/log/syslog
。 - 权限控制:
- 限制用户使用Cron:通过
/etc/cron.allow
和/etc/cron.deny
文件。 at
的权限控制文件为/etc/at.allow
和/etc/at.deny
。
- 限制用户使用Cron:通过