Linux 单一、循环例行性工作 at crontab 命令的使用 crontab 宝藏练习题分享

目录 :       

                    基础概念

                    单一执行的例行性工作

                    循环执行的例行性工作

基础概念  : 

       

        概念导入  :      

                            #    什么是例行性工作 ?   

                                 直接理解就是 :在某一个时刻需要执行的事情。

                                                           某一个时刻 : 就是在未来的某一个时间点 

                                 再举个例子 :  就像我们每到期末就得考试。像是一个定时任务,举例闹

                                                          钟,你今天晚上定一个明早八点的闹钟,这就是例行性工作

                              例行性工作的分类 :

                                  正如目录中看到的,例行性工作分为 单一性和循环性 例行性工作。

                                  依旧拿闹钟举例来区分这俩区别 :

                                  我们在定闹钟的时候,也就分为两种闹钟 :

                                       

                                         一种是 只定明天早上八点钟的闹铃,也就是明天响过就不再响了

                                        是一种临时的闹钟,只在明天早上起作用,响一次就结束了。

                                        一种是周一至周五早上八点的闹钟,就是在周一到周五的每天八点都会响

                                        一遍,周一到周五这个循环内都会响。

                               因此第一种就是单一执行的例行性工作,第二种就是循环执行的例行性工作。

单一执行的例行性工作 : 

           

          操作命令 :  at  和  atd     

                               注 :首先, at 是命令,atd   不是命令是 “ 服务 ”   at 命令对应的是 atd 的服务

                                官方 : 我们使用 at  命令来生成所要运行的工作,并将这个工作,以文本方

                                              式写入  /var/spool/at/  目录内,该工作便能等待 atd 这个服务的取用

                                              与执行了。

                          简单理解 : at 命令主要是制造这个例行任务,真正执行的是 atd 服务 在执行 。

                                     #  :  结合官方的解释,在我们进行例行性工作过的时候,我们需要注意两

                                               个点 :

                                                           第一个  : 使用 at 命令去配置的时候,注意看 atd 服务会不

                                                                             会去执行这个服务(结果当然是 要执行的 )

                                                           第二个  :  在 atd 服务执行后,注意看  /var/spool/at/ 这个目

                                                                              录下有没有对应的内容。

          安全问题 : 即不是所有人都可以进行 at 工作调度。 我们可以利用 /etc/at.allow 和

                               /etc/at.deny  这两个文件来进行 at 的使用限制。

                               #   这里的安全问题说白就是有一个限制,即类似黑名单,白名单的限制,你在

                                    黑名单里那你就不能使用  at 命令,你在白名单里才可以使用 at 命令!!

                               #    /etc/at.allow    即: 白名单    名单里的用户即可以使用  at  命令

                                     /etc/at.deny    即 : 黑名单    名单里的用户不能使用  at  命令 

                               #   我们来看看这两个目录下的内容 : 

                                  

                                    :  我们可以发现在系统默认下,只有一个目录就是 : /etc/at.deny 这一个

                                             目录,也就是说只要在这个目录下的用户是不可以使用 at 命令的,不

                                             在这个目录下的用户就可以使用 at 命令。

                                             我们查看这个目录,发现目录下什么东西都没有,也就是说目前,都

                                             可以使用  at  命令。

        at 命令详解  : 

                                #  命令格式  :  at  [ 选项 ]  [ 时间 ] 

                                    相关参数  :                                

选项说明
-m

当任务完成之后,即使没有标准输出,将给用户发送邮件

-l

atq的别名,可列出目前系统上面的所有该用户的at调度

-d

atrm的别名,可以取消一个在at调度中的工作

-v

使用较明显的时间格式,列出at调度中的任务列表

-c

可以列出后面接的该项工作的实际命令内容

-f

从文件中读取作业

                 

                                  时间格式 :              

时间说明

HH:MM

今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行

HH:MM YYYY-MM-DD

强制规定在某年某月的某一天的特殊时刻进行该工作

now + 2 minutes

从现在开始几分钟minutes, hours, days, or weeks

                                       举例示意 :

                                           1.   at 10:45 

                                             (代表的就是在今天的10点45分执行任务,如果时间点已过,那

                                               么,明天的10点45再执行)

                                           2.   at 3:30 AM 08/01/2022  

                                                ( 表示 :  在2022年8月1日 上午 3点30 执行任务)

                                           3.   at  now + 2 minutes 

                                                ( 表示 : 从此刻起的两分钟后)

                                                 at  now + 3 hours 

                                                ( 表示 : 从此刻起的三小时后)

                                                at  3:30  AM  tomorrow 

                                                ( 表示 :  在明早3点半 )

                                            #  显然可以看到 上示中有几个当中在表达事件的时候是有 +号的;

                                                所以  +  : 它表示的是 相对于现在,即相对于此时此刻。

                                                

      实例演示   :                 

                                              任务  :

                                              #    设置一个 三分钟后的闹铃                              

[root@localhost ~]# at now + 3 minutes     # 这一行是 在 3分钟后 at命令来配置 atd服务
warning: commands will be executed using /bin/sh
at> echo "didididi..." > /root/at_alram    # 这行 是 atd 执行的服务的内容 即3分钟后要执行的内容
at> <EOT>
job 15 at Mon Aug  1 10:48:00 2022
[root@localhost ~]#  

                                          上示内容即设置成功,然后,只需要等待 3 分钟去查看结果即可。

                 注  :关于在执行命令时需要知道的一些操作

                          #   关于删除  (就是比如在命令行中输入内容结果输入错了,想删掉,重新写)

                               请看示例 :     

                                请注意黄色圈着的内容 : 这是—— 我想输入 “didididi..." 结果多按了1234,然

                                                                          后我想要把 1234 删除,就按下 我们最常用的删除

                                                                          键(就是键盘上我们横排123456...数字键的那一行

                                                                           的最后一个按键) 

                                                                           结果就是 : 每按下一个删除键就会 显示出一个黄

                                                                           色圈的内容。

                                 

                                                  这就说明我们的删除键并不是传统意义上的删除键。

                                                  删除键为 : ctrl  +  删除键 (传统意义的删除键) 

                        #    关于命令执行                

[root@localhost ~]# at now + 3 minutes    
warning: commands will be executed using /bin/sh
at> echo "didididi..." > /root/at_alram  # 到这一步,其实我们的命令已经改写的都写好了,那怎么执            
at>                                      # 行所写的命令呢??  按 Enter 键嘛??
at>                                      # 按 Enter 键出来的结果还是 at> 

                             所以当我们把命令该敲得都已经敲了,怎么执行命令呢?

                             执行命令键 :  Ctrl  +   D                                   

                                       任务结果 :

[root@localhost ~]# ls 
anaconda-ks.cfg  at_task2  Desktop    Downloads             Music     Public     Videos
at_alram         cd        Documents  initial-setup-ks.cfg  Pictures  Templates
# 可以看到在 根目录下生成了 at_alram 文件

[root@localhost ~]# more at_alram
didididi...
# 查看 at_alram 文件 查看后发现就是我们在 atd 服务执行的内容,即说明我们的例行性工作执行成功。

                                              任务结果就是 在 3 分钟后执行了我们的任务 : didididididi.....

                    除了使用 ctrl +  D  (   这种交互式 执行命令 )  还有一种方式来执行 

                    ===>>>

                    就是使用  管道符 ( | )           

echo " echo 'hello again ' >> ~/at.txt  |  at  now + 1 minute 

 

                    注  :  at  命令只会执行一次,因为它是 一次性计划任务呀,就你设置的这个任务,

                               它一执行就结束了,就不会再有这个任务了~!!!

                               所以,它只执行一次。

         

循环执行的例行工作

                        先导   :  循环例行性工作调度是由 crond  这个系统服务来控制的。                     

                   操作命令 :   crond  和 crontab        

                                           注  :  crond 命令是来 执行例行性工作的, crontab 是来编辑的。

                   安全用户 :   与  单一执行例行工作相似, 循环例行工作也有安全用户,也有对用户

                                         的限制,在有的文件里出现的用户则是不可以使用 crontab 的。

                                         / etc / cron.deny  里的用户不可以 使用 crontab 。

                    记录      :   

                                    #  当用户使用 crontab  新建工作调度之后,该项工作就会被记录到

                                         /var/spool/cron  里面

                                    #  cron 执行的每一项工作都会被记录到  /var/log/cron 这个日志文件中去 

                                            

                  crontab    : 

                        命令格式 :  crontab  [ -u uesr]  [ -l | -r  | -e  ]  

                        参数详解 :    

参数  说明
-u只有 root 才能进行这个任务,帮助某个用户 新建/删除 crontab
-e 编辑  crontab  的工作内容
-l

 查阅  crontab 的工作内容

-r 删除所有的 crontab 的工作内容

                                    :   

                                             - u  :  你可以为自己设置任务,但是如果要帮别人(指用户)

                                                      设置任务(新建或删除),你就必须是管理员用户才可以。

                                                       -u  后面的 user  指的就是 要帮别人(用户) 的那个用户。

                                             - e  :  说明里面解释的是 “ 编辑 ”  编辑 就包含了 删除 和 添加 。 

                                                       下面的 -r  是指删除所有,而 -e 的删除 就是可以删除某

                                                        一个工作内容!!!

                  crontab  -e  :      

                                     注  :  上示命令即是 要进行 编辑 任务的命令选项(-e)                                                               ​​​​​​​      

                                                上示命令输完后,会出现一个编辑器(就跟 vim编辑器 几乎一样)

                                                当你编辑完之后必然要进行保存,那么,保存到哪里去了呢?

                                                 保存到 :  / var / spool / cron 里面去了。

                                                

                                                我们想要进行的 循环例行性工作 就是在上示里进行编辑的,那么,

                                                在上示里面我们是怎样编写 工作内容的呢? 格式又是怎样的呢?

              

                             文件格式   :  每一行为一个工作,每项工作具有六个字段       

代表意义分钟小时日期月份命令
数字范围0-590-231-311-120-7 (0和7代表的都是周日)执行的命令

                                      :  #  我们表达 循环周期 就必须要用到上示 五个时间字段;

                                                   这五个字段在编辑时必须要带齐;

                                               #   前五个(分钟 - 周) 代表的是循环的周期,后一个字段(命令)

                                                   代表的是执行的命令(也就是要执行的任务)

                                               #   日期 : 指的是月中天 ( 每月里的哪一天 ) 

                                               #   周  :  也就是 星期几 ; 它是完全独立于前面几个时间字段的。

                                                                因为每月都有好几个 周一、周二。。。等等

                                                     注 :  在我们编辑任务的时候,自然必须要写 这五个时间字段,

                                                               关于这五个时间字段需要注意的是 : 日期(月中天)和

                                                               周(星期几) 一般是不同时用的; 也就是上示注释“周”里

                                                               的那句话说的那样 : 周是完全独立于前面几个字段的。

                                                               所谓独立就是 : 主要还是不与 日期(月中日) 同时 使

                                                               用。  因为 日期(月中日) 很纯粹 ,一个月就那么多天,

                                                               每天都是不重复的,7月1日 就是指的 7月1日,8 月16 就

                                                               是指的 8月16 , 因为你绝对不可能在 7 月找到 两个 1

                                                               日,你也不可能在 8月找到 两个 16 日,但是,反观 周

                                                              (周几)在一个月里可是有很多个 周一,周二,周三,周

                                                                四。。。。等等的,这就造成了 同一个月中 都是 星期

                                                                一, 却对应有好几个日期。 综上 : 一般不同时使用日

                                                                期(月中日) 和  周(星期几) 

                        编辑中的特殊字符  :       

特殊字符含义

*

代表任何时刻
, (逗号)代表分隔时段
-代表一段时间范围
*/ 数字指定时间的间隔频率,例如每3分钟进行一次, */3

                                 :   #   *   :  代表任何时刻 即 :

                                                           在分钟字段下  *  就代表 每一分钟

                                                           在小时字段下 *   就代表 每一小时   

                                                           在日期字段下 *   就代表 1-31 日中的每一日

                                                           在月份字段下 *   就代表 1-12 月 中的每一月

                                                           在 周  字段下 *    就代表  周一 至  周日 的每一日

                                           #    ,    :     主要就是用来分隔,时间可以是连续也可以是间断的。

                                                             比如 :

                                                                        在分钟字段下 :  16,17,19  指的就是 16 ,17,19 分钟

                                                                                                     显然是间隔两分钟。

                                                                                                     16,17,18  这里的时间是连续的。

                                                                       总之 : , 可以用连续的时间,也可以用于间隔的时间 

                                         #       :  它主要是用来表示连续的时间。

                                                              比如 :  现在我要布置一个明早 六点至八点的任务

                                                                            那就在小时字段下 : 6-8  

                                                              注意 :  六点到八点 这是连续的时间,我们就可以用 - ,

                                                                            但是,我们刚才学了因此 六点到八点除了使

                                                                            用 我们也可以使用 , 表示为 : 6,7,

                                          #   /数字   :  它的意义在于 时间间隔的频率 ,所谓频率就是指的表格里

                                                              的 含义  : 每隔多少分钟; 每隔多少小时,每隔多

                                                                                 多少日 ;  每隔多少月 。 

                                                                                 分钟 和 小时 经常用, 日 和 月很少用。

                                                                注 : 每隔多少 (分,时,日,月)编辑的时候就在对应

                                                                         的字段下面进行编辑。

                                                                         在分的字段下编辑就代表 每隔多少分钟。其它同理

                                                                 : 格式虽然为 / 数字 但是在编辑的时候 前面要加

                                                                           即 :  * / 

                            时间练习 :    只练习时间部分,命令部分不练习。

                                                 #  每小时执行,每小时的整点执行               

00 *  *  *  *  

                                                 #   每周执行, 每周四的凌晨 2 点 1 分执行 

1 2 * * 4 

                                                 #   每月执行,每月的 3 号 的 下午2 点 1分 执行  

1  14  3  *  *  

                                                 #    每周 3 和 周 5 的 2 点 1分执行 

1 2 *  *  3,5 

                                                #     每年执行, 每年的 4 月 3 号  的 凌晨 2 点 1 分  执行

1  2   3  4  *  

                                               #     每周六、日 下午 的 1 点 2 点 的每一分钟都执行

* 13,14   *  *  6,7 

                                                周一到周五的每天早上 9 点 一直到 下午 6 点 的每一个整点

                                                 (工作日的每个小时整点)

00  9-18  *  *  1-5

                                             #    每隔  10  分钟 执行一次任务 

*/10  *   *  *  *  

                                             每天的凌晨 3点半 和  12 点半 执行任务     

30 3,12  *  *  *   

                                               每隔 6小时 ,执行任务 

00  */6  *  *   *  

                                          #       每天晚上 9 点 30 重启 nginx

30 21 *  *  *   /usr/bin/systemctl  restart  nginx 

                                                每月的1/10号 凌晨 4 点 45 执行脚本 

45 4 1,10 *  *  

                                          #     每周六 、 日 的凌晨 1 点 10 分执行脚本 

10  1  *  *  6,7  

                                             每天的 18点到23 点 之间,每隔30分钟 执行一次 

*/30  18-23  *  *  * 

                             #   #      每隔一小时执行一次           

0  *  *  *  *  

                                         4 月份的周一至周三的上午 11 点 执行脚本 

0  11   *   4   1-3

                       #     #       #    每天早上 7 点 到 上午 11 点 ,每 2 小时 运行 cmd  命令

0   7-11/2  *  *  *  

                                              :  本道题与往常的题有所区别 : 每2个小时 / 前面没有 

                                           每天 6 点 执行脚本 

0  6   *  *  * 

                                        #      每天  10 点 31  开始,每隔 2 小时 重复一次

31  10/2  *  *  * 

                                                    :  本道练习题 与 上一道  注释 的含义一样。

                           #    #          每 周一到周五 8 :00  ,每周一到周五 9 :00

0  8,9  *  *  1-5

                                            每天  10 :00  ,16 :00   执行 

00  10,16  *   *   *

                                   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值