【Shell编程 / 7】定时任务:Cron和at命令的设置与应用


定时任务

在日常的运维和自动化管理中,经常需要执行定期任务。Shell 提供了两种常用的定时任务工具:cronat。通过这些工具,用户可以在特定时间或周期性地自动执行命令或脚本,减少人工干预,提高工作效率。

Cron定时任务

cron 是 Unix 和类 Unix 系统中的定时任务管理工具,它可以用来在指定的时间间隔内定期执行任务。cron 的配置文件是 crontab,它定义了任务的执行时间和执行内容。

设置Cron任务

cron 定时任务的配置文件是由一系列时间表达式和命令组成,格式如下:

* * * * * /path/to/command

这五个星号代表时间的不同部分,从左到右分别表示:

  1. 分钟(0 - 59)
  2. 小时(0 - 23)
  3. 日期(1 - 31)
  4. 月份(1 - 12)
  5. 星期几(0 - 6) 其中 0 代表星期天

示例

  1. 每分钟执行一次任务:

    * * * * * /path/to/your-script.sh
    

    每分钟执行一次 your-script.sh 脚本。

  2. 每天凌晨 3 点执行任务:

    0 3 * * * /path/to/your-script.sh
    

    每天凌晨 3 点执行脚本。

  3. 每星期一下午 4 点执行任务:

    0 16 * * 1 /path/to/your-script.sh
    

    每星期一下午 4 点执行任务。

  4. 每月 1 号和 15 号中午 12 点执行任务:

    0 12 1,15 * * /path/to/your-script.sh
    

    每月 1 号和 15 号中午 12 点执行任务。


使用Crontab命令编辑定时任务

可以通过 crontab 命令编辑定时任务:

  • 查看当前用户的定时任务:

    crontab -l
    
  • 编辑定时任务:

    crontab -e
    

    将打开默认编辑器,我们可以在里面添加或修改定时任务。

  • 删除当前用户的定时任务:

    crontab -r
    
  • 为其他用户设置定时任务(需要root权限):

    sudo crontab -u username -e
    

Cron任务输出

默认情况下,cron 任务的标准输出和错误输出会通过邮件发送到当前用户。如果不希望收到邮件,可以在任务末尾加上 >/dev/null 2>&1 来丢弃输出:

0 3 * * * /path/to/your-script.sh > /dev/null 2>&1

at命令

at 是另一个用于执行定时任务的工具,但与 cron 不同的是,at 用于执行一次性的任务,而非定期任务。它可以在指定的时间点执行命令或脚本。

基本语法

at TIME [DATE]
  • TIME 指定任务执行的时间,可以是 24 小时制的时间,也可以是相对时间(例如 now + 1 hour)。
  • DATE(可选)指定任务执行的日期。如果不指定,默认是当前日期。

示例

  1. 指定时间执行任务:

    at 03:00 PM
    

    这将进入 at 提示符,允许我们输入要执行的命令。输入完毕后,按 Ctrl+D 提交任务。

  2. 相对时间执行任务:

    at now + 1 hour
    

    这将任务安排在当前时间的 1 小时后执行。

  3. 指定日期和时间执行任务:

    at 2:00 PM 12/25/2025
    

    这将任务安排在 2025 年 12 月 25 日下午 2 点执行。

  4. 执行一个脚本:

    echo "/path/to/your-script.sh" | at 3:00 PM
    

查看和删除at任务

  • 查看当前排定的任务:

    atq
    
  • 删除指定任务:

    atrm JOB_ID
    

    JOB_IDatq 命令中列出的任务 ID。

注意事项

  • at 命令只能用于一次性的任务,如果需要定期任务,仍然应使用 cron
  • at 任务的输出默认会发送到执行者的邮箱,若不需要输出,可以使用 >/dev/null 2>&1 来丢弃输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值