Linux: 任务的定时与延期

概述

  • ls 这种命令是立刻执行的命令,在linux中命令还可以延时执行,它们都涉及到时间的观念

常用命令

  • 先来看下有关系统时间的规格

1 ) date 命令调节时间

  • $ date 显示当前时间
  • 还可以去定制 date 的一个输出, $ man date 可自定义输出
    • $ data "+%H" ,H 是 hour 的首字母,表示 "小时"
    • $ date "+%H:%M:%S" M是分钟,S是秒
      • 也可以自定义分隔其他的字符 $ date "+%H时%M分%S秒"
      • $ data "+现在是%Y年"
  • 这个规则是 + 开头,% 后面的才会被解析

2 )用 date 修改系统时间

  • 需要 root 权限 $ sudo date 10121430 这里没有指定年份, 就拿当前的年份一起做修改
    • 这里会修改成 2024年10月12日14点30分
    • 注意,系统如果开启了自动同步时间,过一会儿时间还会更新成网络同步的

3 ) at 命令:延时执行一个程序

  • 使用 at 命令来设定一个程序的执行时间

  • at 命令只能让程序执行一次

  • 示例

    sh 复制代码
    Wang:~ Wang$ at 22:10
    touch file1.txt
    touch file2.txt
    job 3 at Thu Nov 21 22:10:00 2024
    • 这里 让 22:10 的时候做的事情
    • touch file1.txt 和 touch file2.txt
    • 当按下 CTRL + D 的组合键的时候,显示 job 3 at Thu Nov 21 22:10:00 2024
    • 这里 3 是 job 的编号,表示 3 号任务,我之前创建了2个任务,所以这次是 3
  • 同理:

    • 在明天的某一个时刻执行任务:$ at 22:10 tomorrow
    • 在 11月 22日的 22:10执行任务: $ at 22:10 12/10/19
  • 另一种用法:在指定时间间隔之后执行任务

    • 在 10分钟之后执行程序:$ at now +10 minutes
  • at 命令中的一些关键字

    • minutes: 分钟
    • hours: 小时
    • days: 天
    • weeks: 星期
    • months: 月
    • years
    • 用法同上
  • atq 和 atrm 命令 列出和删除正在等待执行的 at 任务

    • 每次使用 at 指定延期的任务,都会分配 job 编号
    • atq 中的 q 是队列
  • 示例

    sh 复制代码
    Wang:~ Wang$ atq
    1	Thu Nov 21 22:10:00 2024
    3	Thu Nov 21 22:10:00 2024
    Wang:~ Wang$ atrm 1 3
    Wang:~ Wang$ atq
    • atrm 一次删除了多个任务,再次 atq 发现已经全部删除了

4 )sleep 命令:休息一会

  • 可以用分号隔开多个命令,一个接一个执行
  • 这和管道不一样,管道是前一个命令作为后一个命令的输入
  • 用分号隔开的命令,没有关联,例如:
    • $ touch file.txt
    • $ rm file.txt
    • 这里,创建文件,然后再删除它
  • 在两句命令之间可以插入一定的暂停等待时间
    • $ touch file.txt; sleep 10; rm file.txt
  • sleep 后面的数值单位是 秒,也可以指定为 分钟,小时,天等
    • $ sleep 15m
    • m: 分钟
    • h: 小时
    • d: 天

5 )&& 和 || 符号

  • 在编程语言里,一般称为 "逻辑与" 和 "逻辑或"
  • && 与 || 和 分号一样,用于分隔两个命令,使得命令依次执行
  • 貌似和分号类似,但是有区别
    • &&:&& 号前的命令执行成功,才会执行后面的命令
    • ||: || 号前的命令执行失败,才会执行后面的命令
    • 分号: 不论分号前的命令执行成功与否,都执行分号后的命令

6 )crontab 命令:定时执行程序

  • at 命令只能执行某个(某几个)命令一次
  • crontab 却可以重复执行命令
  • 例如:每小时,每分钟,每天,每星期等等

6.1 centos/redHat 安装 crontab

  • 默认 centos 内置了 crontab 程序
  • 不过有的 Linux 发行版可能没装 crontab
  • 举 yum 系列 和 apt 系列的两个例子来看
  • $ sudo yum install vixie-cron crontabs 安装 Crontab
  • $ chkconfig crond on 设为开机自启动
  • $ service crond start 启动

6.2 Ubuntu/Debian 中安装 Crontab

  • $ sudo apt install cron 安装 crontab
  • $ service cron restartrestart cron 重启 crontab

6.3 前期配置工作

  • 来修改 .bashrc 文件,这是 bash 这个 shell 的配置文件
  • $ echo "export EDITOR=nano" >> ~/.bashrc 变更默认编辑器为 nano
  • $ source ~/.bashrc

6.4 了解 crontab

  • crontab 其实是一个命令,用来读取和修改名为 crontab 的文件

  • crontab 文件包含了你要定时执行的程序列表,也包含了执行的时刻

  • 实际上,有2个命令:一个叫 crontab, 一个叫 cron

  • crontab 用于修改 crontab 文件,cron 用于实际执行定时的程序

  • cron 这个单词来源于希腊语,愿意是时间

  • crontab 三个主要参数

    • -l: 显示 crontab 文件
    • -e: 创建/修改 crontab 文件
    • -r: 删除 crontab 文件
  • 修改 crontab 文件

    • 编辑的格式: m h dom mon dow command
    • 上面这句话给出了 crontab 中的每行指令的书写格式
    • m 是 分钟
    • h 是 小时
    • dom 是 day of month 一个月的那一天
    • mon 是 月份
    • dow 是 day of week 星期几
    • command 需要定时执行的命令
  • 参考下图:

  • 现在希望每天 22点10分都在home目录下创建 file.txt 文件

  • 可以在 crontab 文件里写入

    • 10 22 * * * touch ~/file.txt
    • 10 表示 分钟,22 表示小时,其他3个区域是 *
    • 最后的命令是 touch ~/file.txt
  • 路径最好是绝对路径,因为不确定你 cron 命令执行这些语句的时候在哪个家目录

  • 保存后,如果语法正确,crontab 会显示,$ crontab: installing new crontab

  • 意思是正在安装新的 crontab 文件

  • 常用示例如下

    Crontab 意义
    47 * * * * command 每个小时的47分都执行command命令,也就是00点47分,01点 47分,02点47分,等等
    0 0 * * 1 command 每个礼拜一的凌晨都执行 command 命令
    30 5 1-15 * * command 每个月的1~15日的5点30分都执行command命令
    0 0 * * 1, 3, 4 command 每个礼拜一,礼拜三,礼拜四的凌晨都执行 command 命令
    0 */2 * * * command 每2个小时的整点(0,2,4,6,等等)都执行 command命令
    */10 * * * 1-5 command 每个礼拜一到礼拜五的每个10的倍数的分钟(0,10,20,30,等等)都执行 command 命令
  • 列出 contab 文件 $ crontab -l

  • 删除它 $ crontab -r

相关推荐
大树888 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠8 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush48 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5208 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz8 小时前
Maven依赖冲突
java·服务器·maven
不会C语言的男孩10 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈10 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
程序猿阿伟10 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
凡人叶枫11 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
AC赳赳老秦11 小时前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw