Linux计划任务服务程序
计划任务分为一次性计划任务与长期性计划任务,可以按照如下方式理解。
- 一次性计划任务:今晚23:30重启网站服务
- 周期性计划任务:每周一凌晨3:25 把/home/wwwroot 目录打包备份为 backup.tar.gz。
一次性计划任务
一次性计划任务只执行一次,一般用于临时的工作需求。可以用 at 命令实现这种功能,只需要写成“at 时间”的形式就行。如果想要查看已设置好但还未执行的一次性计划任务,可以使用 at -l 命令;要想将其删除,可以使用“atrm 任务序号”。
at 命令中的参数及其作用如表所示。
参数 | 作用 |
---|---|
-f | 指定包含命令的任务文件 |
-q | 指定新任务的名称 |
-l | 显示待执行任务的列表 |
-d | 删除指定的待执行任务 |
-m | 任务执行后向用户发邮件 |
在使用 at 命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚 23:30 自动重启网站服务。
warning 提醒信息不要慌,at 命令只是在告诉我们接下来的任务将由 sh 解释器负责执行。这与此前学习的 Bash 解释器基本一致,不需要有额外的操作。
[root@servera ~]# at 23:00 #今天23:00
warning: commands will be executed using /bin/sh
at> systemctl restart httpd #重启网站服务
at> # Ctrl + D 退出交互模式
job 3 at Sat Sep 24 23:00:00 2022
[root@servera ~]# at -l # at -l 查看设置的一次性计划任务
3 Sat Sep 24 23:00:00 2022 a root
把前面学习的管道符(任意门)放到两条命令之间,让 at 命令接收前面 echo 命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的。
[root@servera ~]# echo "systemctl restart httpd" | at 23:40
warning: commands will be executed using /bin/sh
job 4 at Sat Sep 24 23:40:00 2022
[root@servera ~]# at -l
3 Sat Sep 24 23:00:00 2022 a root
4 Sat Sep 24 23:40:00 2022 a root
上面设置了两条一样的计划任务,可以使用 atrm
命令轻松删除其中一条:
[root@servera ~]# atrm 4
[root@servera ~]# at -l
3 Sat Sep 24 23:00:00 2022 a root
把计划任务写入 Shell 脚本中,当用户激活该脚本后再开始倒计时执行,而不是像上面那样在固定的时间(“at 23:30”命令)进行。这该怎么办呢?一般我们会使用“at now +2 MINUTE”的方式进行操作,这表示 2 分钟(MINUTE)后执行这个任务,也可以将其替代成小时(HOUR)、日(DAY)、月(MONTH)等词汇:
[root@servera ~]# at now +2 MINUTE #两分钟后的一次性计划任务
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at>
job 6 at Sat Sep 24 01:09:00 2022
[root@servera ~]# date
Sat Sep 24 01:08:30 EDT 2022
周期性计划任务
希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么Linux 系统中默认启用的 crond 服务简直再适合不过了。
创建、编辑计划任务的命令为 crontab -e,查看当前计划任务的命令为 crontab -l,删除某条计划任务的命令为 crontab -r。另外,如果您是以管理员的身份登录的系统,还可以在 crontab 命令中加上-u 参数来编辑他人的计划任务。crontab 命令中的参数及其作用如表所示。
参数 | 作用 |
---|---|
-e | 编辑任务计划 |
-u | 指定用户名称 |
-l | 列出任务列表 |
-r | 删除计划任务 |
口诀“分、时、日、月、星期 命令”。这是使用 crond 服务设置任务的参数格式(其格式见表 4-8)。需要注意的是,如果有些字段没有被设置,则需要使用星号( * )占位
假设在每周一、三、五的凌晨 3:25,都需要使用 tar 命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。可以使用 crontab -e 命令来创建计划任务,为自己创建计划任务时无须使用-u 参数。crontab –e 命令的具体实现效果和 crontab -l 命令的结果如下所示:
[root@servera ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@servera ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
在 crond 服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨 1 点自动清空/tmp 目录内的所有文件。
需要注意的是,在 crond 服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用 whereis 命令进行查询。
[root@servera ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@servera ~]# crontab -e
crontab: installing new crontab
[root@servera ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm /tmp/*
删除 crond 计划任务则非常简单,直接使用crontab -e
命令进入编辑界面,删除里面的文本信息即可。也可以使用crontab -r 命令直接进行清空
计划服务的注意事项。
- 在 crond 服务的配置参数中,一般会像 Shell 脚本那样以#号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。
- 计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。
相关文章
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.1)- 玩转板载OpenSDA,Freelink调试器
- 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)
- 痞子衡嵌入式:终于可以放开聊一聊i.MXRT1170这颗划时代MCU了
- 痞子衡嵌入式:MCUBootUtility v2.0来袭,i.MXRT1010哪里跑
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(1)- 官方EVK简介
- 痞子衡嵌入式:恩智浦MCU集成开发环境与开发工具教程 - 索引
- 痞子衡嵌入式:高性能MCU之人工智能物联网应用开发那些事 - 索引
- 如何在Linux中使用less命令进行搜索文本?
- git merge 命令详解
- C++基础篇之什么是 数据结构
- Hello DPU,Goodbye CPU!
- C++基础篇之什么是数据类型
- Golang ast 的使用
- c++中的std::stod, stCPP程序说明std::stod():stof, std::stold
- php解压文件
- 堪称一站式管理平台,同时支持Linux、MySQL、Redis、MongoDB可视化管理!
- Golang语言情怀--第94期 区块链技术-centos安装部署IPFS
- Golang语言情怀--第96期 区块链技术-以太坊公链合约部署-第2节:本地合约部署
- Golang语言情怀--第97期 区块链技术-以太坊公链合约部署-第3节:合约转Go语言代码