9、任务计划

概要

计划任务主要是做周期性的任务,主要是定期备份数据

计划任务分为两类:

  • 一次性调度执行
  • 循环调度执行

at:一次性定时任务

at命令的功能是用于设置一次性定时计划任务,是Linux系统中常用的计划任务工具之一,会以atd守护进程的形式在后台模式运行。一旦设置的计划任务被执行,则该任务就会被从任务列表库中删除,因此常被用于仅需执行一次的工作。

语法格式:

  1. at [timespec]:交互式输入,按Ctrl+d结束输入
  2. at [参数] [任务计划]

常用参数

参数 描述
-b 设置批处理命令的别名
-c 显示指定任务的内容
-d 删除系统中的等待任务
-f 将指定文件提交等待任务
-l 显示系统中的全部任务
-m 任务完成后给用户发邮件
-M 从不向用户发邮件
-q 使用指定的队列
-r 删除指定的任务作业
-t 以时间的形式提交运行任务
-V 显示版本信息

使用示例

  • 让系统五分钟后执行命令:useradd user03

    [root@localhost ~]# at now +5 min
    at> useradd user03						// 用户输入定时结束后要执行的指令
    at> <EOT>								// 按Ctrl+d结束输入
    job 4 at Sat May  4 17:42:00 2024		// 输入完成后系统显示任务号和执行时间
    
  • 让系统一天后执行命令:useradd user04

    [root@localhost ~]# at noon +1 days
    at> useradd user04
    at> <EOT>
    job 5 at Sun May  5 12:00:00 2024
    
  • 显示系统中全部一次性任务

    [root@localhost ~]# at -l
    3	Sun May  5 12:00:00 2024 a root
    5	Sun May  5 12:00:00 2024 a root
    
  • 删除指定的任务5

    [root@localhost ~]# at -r 5
    
  • 在2024年5月10日的当前时刻,执行文件:/usr/local/nginx/sbin/nginx

    [root@localhost ~]# at -f /usr/local/nginx/sbin/nginx 05/10/2024
    job 6 at Fri May 10 17:46:00 2024
    
  • 在当天的23:00执行文件:/usr/local/nginx/sbin/nginx

    [root@localhost ~]# at -f /usr/local/nginx/sbin/nginx 23:00
    job 7 at Sat May  4 23:00:00 2024
    

循环调度任务

概要

cron:周期性计划任务,也叫循环调度任务

croud程序是运行计划任务的基程序

  • 查看croud的进程

    [root@localhost spool]# ps -aux | head -1;ps -aux | grep crond
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root       1125  0.0  0.0 126384  1684 ?        Ss   17:24   0:00 /usr/sbin/crond -n
    
  • 查看croud的服务

    [root@localhost spool]# systemctl status crond
     crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since  2024-05-04 17:24:09 CST; 48min ago
     Main PID: 1125 (crond)
        Tasks: 1
       CGroup: /system.slice/crond.service
               └─1125 /usr/sbin/crond -n
    
    5 04 17:24:09 localhost.localdomain systemd[1]: Started Command Scheduler.
    5 04 17:24:09 localhost.localdomain crond[1125]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 22% if used.)
    5 04 17:24:10 localhost.localdomain crond[1125]: (CRON) INFO (running with inotify support)
    

cron文件

计划任务存储在目录:/var/spool/cron 下

当用户创建计划任务后,会在目录/var/spool/cron下面创建一个与用户名同名的文件

计划任务格式

* * * * * command

上面五个*从左到右分别表示:分、时、天、月、周。command表示要执行的命令

字段范围

字段 取值范围
0到59之间的整数
0到23之间的整数
1到31之间的整数
1到12之间的整数
0到7之间的整数,0或7表示星期日

5个*可用的语法

规则 说明
* 表示匹配该栏位的每一个时间点
x-y 表示范围:x到y,包含x和y
x,y 表示列表:x和y。也可以表示范围,如:5,10-15,20
*/x 表示每x个时间点都执行一次
  • 示例1:表示在每年的6月10日12时05分看一下tmp目录下面有什么东西

    5 12 10 6 * ls /tmp
    
  • 示例2:表示每五分钟看一下tmp里面有什么东西

    */5 * * * * ls /tmp
    
  • 示例3:每个月的10号到20号的11点05分看一下tmp里面有什么东西

    5 11 10-20 * * ls /tmp
    
  • 示例4:每年的1,3,5月的1号0点0分看一下tmp里面有什么东西

    0 0 1 1,3,5 * ls /tmp
    
  • 示例6:每分钟都看一下tmp里面有什么东西

    * * * * * ls /tmp
    
  • 示例7:每月的10号,15到20号,25号的0点0分看一下tmp里面有什么东西

    0 0 10,15-20,25 * ls /tmp
    
  • 示例8:每个星期五的8点30分看一下tmp里面有什么东西

    30 8 * * 5 ls /tmp
    

crontab:管理周期计划任务

词组cron table的缩写,其功能是管理定时计划任务。定时计划任务,顾名思义就是计划好的任务,到了时间就会自动执行。

在Linux系统中,crond是一个定时计划任务服务,用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入配置文件,那么就会按照预定的周期时间自动执行,而crontab命令则是用于配置定时计划任务的工具名称。

语法格式:crontab 参数 对象

常用参数

参数 描述
-e 设置任务
-i 删除前询问用户是否确认
-l 显示任务
-r 删除任务
-u 设置用户名
--help 显示帮助信息

使用示例

  • 设置周期计划任务

    [root@localhost spool]# crontab -e
    // 如果是该用户第一次设置周期任务,则会出现如下提示
    no crontab for root - using an empty one
    crontab: installing new crontab
    

    输入该命令后,会进入文本编辑模式,与vim的用法一模一样

    在文本文件中安装任务计划格式输入即可

    使用wq命令保存退出后,在目录/var/spool/cron下创建与用户名同名的文件,里面存放的就是任务计划

    如下:

    [root@localhost cron]# cd /var/spool/cron/
    [root@localhost cron]# ls
    root
    [root@localhost cron]# cat root
    */10 * * * * ls /tmp			// 每十分钟看一下tmp里面有什么东西
    
  • 为其他用户:liu设置计划任务,只有管理员才可以

    [root@localhost cron]# crontab -e -u liu
    no crontab for liu - using an empty one
    crontab: installing new crontab
    
    // 验证是否设置成功
    [root@localhost cron]# ls
    liu  root
    [root@localhost cron]# cat liu
    */20 * * * * ls /etc
    
  • 查看当前用户已有的计划任务列表

    [root@localhost cron]# crontab -l
    */10 * * * * ls /tmp
    
  • 删除当前用户的任务计划

    [root@localhost cron]# crontab -r
    
  • 删除指定用户:liu的 计划任务

    [root@localhost cron]# crontab -u liu -r
    
posted @   7七柒  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示