计划任务管理

计划任务管理

at;crontab

at:一次性计划任务

at 是一个用于在指定时间运行一次性命令的 Linux 工具。

1. 基本语法

at [选项] 时间

2. 时间格式

at 支持多种时间格式,常见的包括:

  • 指定的日期和时间
    • at 10:00:在当天的 10:00 运行。
    • at 15:30 10/31:在 10 月 31 日的 15:30 运行。
  • 相对时间
    • at now + 1 hour:在当前时间的一个小时后运行。
    • at now + 2 days:在当前时间的两天后运行。
  • 使用关键字
    • at midnight:在午夜运行。
    • at noon:在中午运行。
    • at 3pm tomorrow:在明天下午 3 点运行。

3. 输入命令

在输入时间后,at 会进入交互模式,你可以输入要执行的命令。输入完成后,使用 Ctrl+D 来结束输入。例如:

$ at 10:00
at> echo "Hello, World!" > /tmp/hello.txt
at> <Ctrl+D>

4. 列出已安排的任务

使用 atq 命令可以列出当前用户已安排的所有任务:

atq

输出格式通常为:

1       2024-10-27 10:00 a user

5. 删除已安排的任务

可以使用 atrm 命令来删除特定的任务,任务编号可以从 atq 的输出中获得:

atrm <任务编号>

例如:

atrm 1

6. 常见选项

  • -f:从文件读取命令,而不是标准输入。

    at -f /path/to/script.sh 10:00
    
  • -m:即使任务在后台执行,也会在执行完成后发送邮件通知用户。

    at -m 10:00
    
  • -q:指定任务队列。

    at -q b 10:00
    
  • -V:显示版本信息。

at 命令通常需要有相应的权限,确保当前用户在 /etc/at.allow 或不在 /etc/at.deny 文件中。

at 任务是在用户的环境下执行的,因此在任务中可能需要使用绝对路径。

crontab :周期性计划任务

crontab 是 Linux 和 Unix 系统中用于定期执行任务的工具。它可以按照指定的时间表自动运行命令或脚本。

1. 基本概念

  • Cron:一个守护进程,用于在后台定期执行任务。
  • Cron 表:定义了何时执行任务的格式。
  • Crontab 文件:每个用户可以有自己的 crontab 文件,存储要执行的任务。

2. Crontab 文件格式

crontab 的每一行通常由六个字段组成:

* * * * * 命令
- - - - -
| | | | |
| | | | +----- 星期 (0 - 7) (星期天是0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 一个月中的日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)

3. Crontab 命令

使用 crontab -e 命令编辑当前用户的 crontab 文件:

crontab -e

使用 crontab -l 命令列出当前用户的 crontab 任务:

crontab -l

使用 crontab -r 命令删除当前用户的 crontab 文件:

crontab -r

如果希望在删除前确认,可以使用 -i 选项:

crontab -r -i

如果你有一个包含任务的文件,可以使用 crontab 命令从该文件加载任务:

crontab /path/to/file

4.时间格式示例

以下是一些常见的时间格式示例:

  • 每分钟执行

    * * * * * /path/to/command
    
  • 每小时执行

    0 * * * * /path/to/command
    
  • 每天中午 12 点执行

    0 12 * * * /path/to/command
    
  • 每周一执行

    0 0 * * 1 /path/to/command
    
  • 每月 1 日执行

    0 0 1 * * /path/to/command
    
  • 特定日期和时间(例如每年 1 月 1 日的 10:00)

    0 10 1 1 * /path/to/command
    

5. 常见用法示例

  1. 每分钟备份文件

    * * * * * cp /path/to/source /path/to/backup
    
  2. 每小时清理临时文件

    0 * * * * rm -rf /tmp/*
    
  3. 每天运行脚本并将输出记录到日志文件

    0 0 * * * /path/to/script.sh >> /var/log/script.log 2>&1
    
  4. 每周六的凌晨 2 点执行系统更新

    0 2 * * 6 apt update && apt upgrade -y
    

输出处理:默认情况下,cron 任务的输出会通过邮件发送到用户。可以将输出重定向到文件,或使用 >/dev/null 2>&1 来丢弃输出。

[root@localhost ~]# cat /var/spool/cron/root  root写的计划任务
0 * * * * rm -rf /tmp/*
[root@localhost ~]# ls /var/spool/cron/  计划任务存放位置
root
[root@localhost ~]# cat /etc/cron.deny  黑名单,写在这个文件中的用户无权限执行计划任务
user1
[root@localhost ~]# touch /etc/cron.allow ; echo user2 > /etc/cron.allow ;cat /etc/cron.allow
user2
# 创建 /etc/cron.allow  如果allow文件里有内容,只有这里的用户可以执行,deny文件被忽略
posted @ 2024-11-22 21:09  pro111  阅读(8)  评论(0编辑  收藏  举报