在Linux系统中,定时任务(又称计划任务)是自动化运维的核心功能,可通过cron
和at
两种工具实现,以下是详细操作指南:
cron:周期性定时任务
核心概念
- cron守护进程:系统后台服务,负责执行计划任务。
- crontab文件:存储任务配置,用户级文件位于
/var/spool/cron/
,系统级文件位于/etc/crontab
。
操作命令
crontab -e # 编辑当前用户的任务(首次会提示选择编辑器) crontab -l # 查看当前用户的任务 crontab -r # 删除当前用户所有任务(慎用!)
时间格式详解
任务格式:分钟 小时 日期 月份 星期 命令
- 字段范围:
- 分钟(0-59)
- 小时(0-23)
- 日期(1-31)
- 月份(1-12或英文缩写)
- 星期(0-7,0和7均代表周日,或英文缩写)
- 特殊符号:
- :任意值(如表示每分钟)
- :多个时间点(如
0,15,30 * * * *
表示每小时的0/15/30分) - :连续范围(如
0 9-18 * * *
表示9点到18点整点) */n
:间隔值(如*/10 * * * *
表示每10分钟)
实用示例
# 每周一9:30发送系统报告 30 9 * * Mon echo "系统报告" | mail -s "Weekly Report" admin@example.com # 每5分钟检查服务状态 */5 * * * * systemctl status nginx >> /var/log/nginx_check.log
系统级定时任务
- 编辑
/etc/crontab
:需指定执行用户(如root
)0 4 * * * root /scripts/clean_logs.sh
- 脚本目录:
- 每小时任务:
/etc/cron.hourly/
- 每日任务:
/etc/cron.daily/
- 每小时任务:
at:一次性定时任务
基本操作
at 14:30 2025-12-31 # 设置执行时间(按Ctrl+D保存) at> /path/to/script.sh # 输入要执行的命令 atq # 查看待执行任务队列 atrm 任务ID # 删除指定任务
时间格式示例
at now + 2 hours # 2小时后执行 at 10:00 tomorrow # 明天10点执行
关键注意事项
-
环境变量问题
cron默认使用简化环境,建议:- 命令使用绝对路径(如
/usr/bin/tar
而非tar
) - 在脚本中显式设置环境变量(如
PATH=/usr/bin:/bin
)
- 命令使用绝对路径(如
-
输出处理
- 任务输出默认以邮件发送,可重定向到文件:
* * * * * /script.sh > /dev/null 2>&1 # 丢弃所有输出 * * * * * /script.sh >> /logfile 2>&1 # 记录到日志
- 任务输出默认以邮件发送,可重定向到文件:
-
权限控制
- 限制用户使用cron:
- 允许名单:
/etc/cron.allow
- 禁止名单:
/etc/cron.deny
(默认存在,为空表示允许所有用户)
- 允许名单:
- 限制用户使用cron:
-
日志追踪
- 查看执行记录:
grep CRON /var/log/syslog
(Ubuntu/Debian)或journalctl -u cron
(Systemd系统)
- 查看执行记录:
最佳实践建议
- 脚本测试:手动运行脚本确认无语法错误。
- 资源监控:避免高频任务消耗过多CPU/内存(如
*/1 * * * *
需谨慎)。 - 错误处理:脚本内添加异常捕获(如
exit 1
触发邮件通知)。 - 备份任务:编辑crontab前备份:
crontab -l > cron_backup.txt
。
引用说明基于Linux man-pages(cron(8)、crontab(5)、at(1))及开源社区最佳实践整理,遵循Linux标准规范(IEEE Std 1003.1),技术细节参考了Ubuntu、Red Hat官方文档及《Linux系统管理技术手册》。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7951.html