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 命令只能让程序执行一次
- 示例
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
- 在 10分钟之后执行程序:$
- at 命令中的一些关键字
minutes
: 分钟hours
: 小时days
: 天weeks
: 星期months
: 月years
年- 用法同上
- atq 和 atrm 命令 列出和删除正在等待执行的 at 任务
- 每次使用 at 指定延期的任务,都会分配 job 编号
- atq 中的 q 是队列
- 示例
Wang:~ Wang$ atq 1Thu Nov 21 22:10:00 2024 3Thu 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 restart
或restart 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
原文地址:https://blog.csdn.net/Tyro_java/article/details/143949340
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!