计划任务at&crontab

时间:2025-03-16 10:32:16

一、 at:一次性计划任务

at [HH:MM] [yy-mm-dd]
        >command
        >(ctrl+d)
      atq:查看任务
      atrm:删除任务 后边指定要删除的任务号
   时间格式也可以:now + count  time-units (minutes,  hours,  days,   weeks)

例:在当天的 21:30 时自动关闭当前系统

[root@localhost ~]# at 21:30
at> shutdown -h now
at> <EOT>
job 2 at Sun May  7 21:30:00 2017

[root@localhost ~]# atq
2    Sun May  7 21:30:00 2017 a root

[root@localhost ~]# atrm 2
[root@localhost ~]# atq


二、crontab周期性计划任务

crontab 是一个强大的工具,用于定期执行重复性任务。无论是备份数据、清理日志,还是定时发送邮件,crontab 都能让这些任务自动化。

crontab(意为 "cron table")是用于配置 cron 守护进程 的命令行工具。cron 是一个在后台运行的服务,负责按照预设的时间表执行任务。通过编辑 crontab 文件,用户可以定义任务的执行时间和具体操作。

按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务


主要设置文件:

  • 全局配置文件,位于文件:/etc/crontab
  • 系统默认的设置,位于目录:/etc/cron.*/
  • 用户定义的设置,位于文件:/var/spool/cron/用户名


格式:

crontab 的语法由 时间字段 和 命令 组成,格式如下:

* * * * * <要执行的命令>
│ │ │ │ │
│ │ │ │ └── 星期几 (0-7, 0和7均代表周日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)
  • 前5个字段用于时间设定:分钟+小时+日期+月份+星期
  • 最后一个字段用于指定具体的任务内容,可以是命令或者脚本
  • 分钟 取值为从0到59之间的任意整数
  • 小时 取值为从0到23之间的任意整数
  • 日期 取值为从1到31之间的任意整数
  • 月份 取值为从1到12之间的任意整数
  • 星期 取值为从0到7之间的任意整数,0或7代表星期日
  • 命令 要执行的命令或程序脚本

时间数值的特殊表示方法:

  • * 表示该范围内的任意时间
  • , 表示间隔的多个不连续时间点 (如 1,3,5)
  • - 表示一个连续的时间范围 (如 1-5)
  • / 指定间隔的时间频率 (如 */5 表示每5单位)

示例:

  • 0 17 * * 1-5 周一到周五每天17:00
  • 30 8 * * 1,3,5 每周一、三、五的8点30分
  • 0 8-18/2 * * * 8点到18点之间每2小时
  • 0 * */3 * * 每3天.......


常用操作:

编辑定时任务:

crontab -e [-u user_name]

编辑当前用户的 crontab 文件

查看任务列表:

crontab -l [-u user_name]

列出当前用户的所有定时任务

删除任务:

crontab -r [-u user_name]

删除当前用户的全部定时任务(谨慎使用!)


实用案例

每天凌晨 3 点备份数据库

0 3 * * * /usr/bin/mysqldump -u root -pPASSWORD database > /backup/db.sql

每 5 分钟执行一次 Python 脚本

*/5 * * * * /usr/bin/python3 /home/user/scripts/check_status.py

每周一早上 8 点清理日志

0 8 * * 1 /bin/rm -rf /var/log/app/*.log


常见问题与技巧

1. 环境变量问题

cron 任务的执行环境与用户登录时的环境不同,可能导致命令找不到(如 python 或 npm)。建议使用绝对路径或在脚本中设置环境变量。

2. 日志记录

通过重定向输出到文件,方便调试:

* * * * * /path/to/script.sh >> /var/log/cron.log 2>&1

记录任务的输出,方便排查问题。

3. 权限管理

  • 用户级任务:通过 crontab -e 配置。
  • 系统级任务:需编辑 /etc/crontab 或使用 /etc/cron.d/