Linux的计划任务管理

2023年 8月 1日 50.5k 0

at一次性

at 工具

  • 由包 at 提供
  • 依赖与atd服务,需要启动才能实现at任务
  • at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
  • 执行任务时PATH变量的值和当前定义任务的用户身份一致
  • at [选项] [时间]

    at [HH:MM] [yyyy-mm-dd]

    at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:

    • 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
    • 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
    • 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

    系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可

    格式 用法
    HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
    Midnight(midnight) 代表 12:00 AM(也就是 00:00)。
    Noon(noon) 代表 12:00 PM(相当于 12:00)。
    Teatime(teatime)下午茶 代表 4:00 PM(相当于 16:00)。
    英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
    MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
    now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。

    image.png

    crontab周期

    • 按照预先设置的时间周期(分钟、小时、天......)重复执行用户指定的命令操作。

    • 属于周期性计划任务。

    • 主要设置文件。

    • 全局配置文件,位于文件:/etc/crontab

    • 系统默认的设置,位于目录:/etc/cron.*/

    • 用户定义的设置,位于文件:/var/spool/cron/用户名

    命令格式

    • crontab -e [-u 用户名] //编辑计划任务
    • crontab -l [-u 用户名] //查看计划任务
    • crontab -r [-u 用户名] //删除计划任务
    选项 功能
    -u user 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
    -e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
    -l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
    -r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
    -i 在删除用户的 crontab 文件时,给确认提示。

    (*)号的概念

    项目 含义 范围
    第一个"*" 一小时当中的第几分钟(minute) 0~59
    第二个"*" 一天当中的第几小时(hour) 0~23
    第三个"*" 一个月当中的第几天(day) 1~31
    第四个"*" 一年当中的第几个月(month) 1~12
    第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日)

    时间表示的特殊符号

    特殊符号 含义
    *(星号) 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
    ,(逗号) 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
    -(中杠) 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
    /(正斜线) 代表每隔多久执行一次。比如"/10***命令",代表每隔 10 分钟就执行一次命令。

    image.png

    image.png

    在书写 crontab 定时任务时,需要注意以下几个事项:

    • 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
    • crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
    • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
    • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论