Linux 定时任务:at 与 crontab
技术积累 Linux 定时任务

在 Linux 系统中,at和crontab是两种常用的任务调度工具,但它们的应用场景和功能截然不同。本文将基于实际场景分析它们的用法、区别及注意事项,帮助开发者高效管理定时任务。

at 命令:用于一次性定时任务,适合在特定时间运行脚本或命,或者适用于临时提醒、延迟关机等场景

# 特性说明 :支持自然语言时间(如 noon, next week, +2 hours)。

# 示例: 安排明天上午10点发送邮件提醒  
echo "echo '会议开始!' | mail -s '提醒' user@example.com" | at 10:00 AM tomorrow  

# 示例: 30分钟后执行脚本
echo "/home/user/backup.sh" | at now + 30 minutes

# 示例: 2025年10月17日14:30执行
echo "/home/user/script.sh" | at 14:30 10/17/2025

# 示例: 明天早上8点运行
echo "sudo apt update" | at 8:00 tomorrow

# 查看任务队列  
atq  
# atq输出示例:
1       Fri Oct 17 14:30:00 2025 a ubuntu

# 删除任务(任务编号为1)  
atrm 1
  
# 依赖 atd 服务,需确保已启动:
systemctl start atd  

交互式输入命令

# 输入后,会进入 at> 提示符,输入要执行的命令,按 Ctrl+D 结束
at 14:30 2025-10-17

# 进入交互式
at> /path/to/your_script.sh
at> echo "Task done" >> /tmp/at_log.txt
at> <EOT>  # 按 Ctrl+D 退出

# 输出示例:
job 3 at Fri Oct 17 14:30:00 2025

crontab 命令:周期性任务调度,通过编辑 cron 表管理重复性任务,适用于日志清理、数据备份等场景。

# Cron 表达式规则(分时日月周)
* * * * * command  
┬ ┬ ┬ ┬ ┬  
│ │ │ │ └─ 星期几 (0-6, 0和7=周日)  
│ │ │ └─── 月份 (1-12)  
│ │ └───── 日 (1-31)  
│ └─────── 小时 (0-23)或者(01-23)  
└───────── 分钟 (0-59)或者(00-59) 
 
# 示例:每日凌晨3点执行备份脚本
crontab -e
# 添加以下行  
0 3 * * * /path/to/backup_script.sh

# 查看当前任务  
crontab -l  

# 清空所有任务  
crontab -r  

应用场景示例

# 示例:每5分钟监控服务器状态
*/5 * * * * /usr/bin/bash /scripts/check_server.sh
场景:实时监控服务器负载、内存、磁盘等状态。
说明:*/5 表示每5分钟执行一次。

# 示例:每周一清理临时文件
0 0 * * 1 /usr/bin/find /tmp -type f -mtime +7 -delete
场景:每周一午夜删除 /tmp 目录下超过7天的临时文件。
关键:1 表示星期一(周日是 0 或 7)。

# 示例:工作日下午6点执行日志压缩
bash
0 18 * * 1-5 /usr/bin/gzip -c /var/log/app.log > /logs/archive/app_$(date +\%Y\%m\%d).log.gz
场景:周一至周五(工作日)下午6点压缩当日日志。
注意:1-5 表示星期一到星期五。

# 示例:每10分钟同步一次文件到远程服务器
*/10 * * * * /usr/bin/rsync -avz /data/ user@remote:/backup/data/
场景:周期性同步关键数据到备份服务器。

# 示例:仅在工作日白天监控网站(早9点到晚6点,每15分钟)
bash
*/15 9-18 * * 1-5 /usr/bin/curl -sS https://example.com >/dev/null
场景:工作日工作时间监控网站可用性。

两者区别与选用

执行频率

  • at:单次执行,适合临时任务(如 2小时后重启服务)。
  • crontab:周期执行,适合固定任务(如 每天清理日志)。

时间灵活性

  • at:支持口语化时间描述,快速设定。
  • crontab:需按固定格式编写表达式,但精度更高。

调试工具

常见问题与避坑指南

环境变量问题

  • cron 任务默认使用简化环境,建议脚本中使用绝对路径,或在 cron 中声明环境变量SHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

日志追踪

  • 可在 cron 任务中重定向输出以调试:bash 0 /script.sh >> /var/log/cron.log2>&1

权限管理

  • at:普通用户默认受限,需通过 /etc/at.deny 和 /etc/at.allow`控制权限。
  • crontab:用户独立任务表,root 可通过 /etc/cron.deny限制访问。

本文最后记录时间 2025-05-23
文章链接地址:
https://wojc.cn/archives/1634.html
本站文章除注明[转载|引用|来源|来自],均为本站原创内容,转载前请注明出处
Win11安装使用Linux子系统遇到的问题
统计文本中每个字符出现的次数
Nali 离线ip数据库文件
苹果CMS v10内容管理系统搭建

没有上一篇了

Node.js Express框架的文件管理程序

留言

顶部