linux的例行性工作

linux例行性工作:

单一执行的例行性工作:仅处理执行一次就结束了,at;

循环执行的例行性工作:每隔一定的周期就需要执行一次,crontab。

 

1、单一执行的例行性工作

要使用单一工作调度时,linux上面需要有负责这个调度的服务atd。我们使用at命令来生成所要运行的工作,并将这个工作以文本方式写入/var/spool/at/目录内,该工作便能等待atd这个服务的取用与执行了。

为了安全问题,不是所有人都可以进行at工作调度。我们可以利用/etc/at.allow和/etc/at.deny这两个文件来进行at的使用限制。at的实际工作过程如下:

先寻找/etc/at.allow这个文件,写在这个文件的用户才能使用at;如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,写在该文件的用户不能使用at;如果两个文件都不存在,那么只有root可以使用at命令。

在rhel里面,由于假设系统上的所有用户都是可信任的,因此系统会保留一个空的/etc/at.deny文件,意思是允许所有人使用at命令,如果你想设置拒绝某人使用at命令,你可将该用户写入/etc/at.deny(格式为一行代表一个用户)

at [-mldv] TIME

           -m:当at的工作完成后,即使没有输出信息,以email通知用户该工作已完成

            -l:at -l相当于atq,列出目前系统上面的所有该用户的at调度

            -d:at -d相当于atrm,可以取消一个在at调度中的工作

            -v:可以使用较明显的时间格式列出at调度中的任务列表

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

TIME  时间格式,定义执行这项工作的时间,格式有:HH:MM表示在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行。HH:MM YYYY-MM-DD指定在哪一年的哪一天的什么时间执行。

实验一:定义2019年的5月19日的17点56显示hello

[root@localhost ~]# at 17:56 2019-05-19
at> wall hello
at> <EOT>
job 6 at Sun May 19 17:56:00 2019

说明:wall命令用于向系统当前所有打开的终端上输出信息。通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。

[root@localhost ~]# atq可以查看目前主机上有多少的at工作调度
6    Sun May 19 17:56:00 2019 a root

[root@localhost ~]# at -l
6    Sun May 19 17:56:00 2019 a root

[root@localhost ~]# ll /var/spool/at/查看该目录下,多出一个普通文件,这个普通文件就是上面设定的例行性工作。
总用量 4
-rwx------. 1 root   root   3114 5月  19 17:51 a00006018c4934
drwx------. 2 daemon daemon    6 5月  19 17:46 spool
 

atrm可以删除某项at工作调度

[root@localhost ~]# date查看时间
2019年 05月 19日 星期日 17:55:58 CST

在2019年5月19日的17:56时会自动显示如下信息:

[root@localhost ~]# 
Broadcast message from root@localhost.localdomain (Sun May 19 17:56:00 2019):

hello
 

2、循环执行的例行性工作

循环执行的例行性工作调度是由crond这个系统服务来控制的。同样,我们也可以限制使用crontab的用户账号。

/etc/cron.allow  将可以使用crontab的账号写入其中,若不在该文件内的用户则不可使用crontab。

/etc/cron.deny   将不可以使用crontab的账号写入其中,若不在该文件内的用户则可使用crontab。

当用户使用crontab新建工作调度之后,该项工作就会被记录到/var/spool/cron/里面,并且是以账号来判别的。cron执行的每一项工作都会被记录到/var/log/cron这个日志文件中。

 crontab [-u user] [-l | -r | -e]

         -u:只有root才能进行这个任务,帮某个用户新建/删除crontab

         -e:编辑crontab的工作内容

         -l:查阅crontab的工作内容

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

[root@localhost cron]# crontab -e

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

代表意义

分钟

小时

日期

月份

命令

数字范围

0-59

0-23

1-31

1-12

0-7(0和7都代表周天) 

执行的命令

特殊字符说明

含义

*(星号)

代表任何时刻

,(逗号)

代表分隔时段

-(短横线)

代表一段时间范围

/数字

指定时间的间隔频率,例如每3分钟进行一次,*/3

 

实验二:设置redhat用户每天早上9点整向大家发出问候信息good morning

[root@localhost ~]# crontab -e -u redhat

        0 9 * * * wall "good morning"

实验三:指定某些用户不可以执行计划任务,分别在下面两个文件中添加上拒绝执行计划任务的用户(此处不进行演示)

        /etc/at.deny

        /etc/cron.deny

实验四:系统的例行性任务

[root@localhost ~]# vim /etc/crontab该文件内容如下

        SHELL=/bin/bash    运行计划所使用的shell 默认是bash

         PATH=/sbin:/bin:/usr/sbin:/usr/bin  指定命令执行环境变量路径

         MAILTO=root  MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户   

        # For details see man 4 crontabs

        # Example of job definition:
        # .---------------- minute (0 - 59)
        # |  .------------- hour (0 - 23)
        # |  |  .---------- day of month (1 - 31)
        # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
        # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
        # |  |  |  |  |
       # *  *  *  *  * user-name  command to be executed

 

user-name表示执行命令的用户是谁

当需要同一时间执行多个脚本时,可以将这多个脚本放在一个目录下,然后使用run-parts来执行。

run-parts:该命令可将后面接的“目录”内的所有文件找出来执行。

假设我的所有脚本放在/text目录下,现在要使用root用户每天都执行一下这个目录下的脚本,写法为:

[root@localhost ~]# vim /etc/crontab

       * * * * * root run-parts /text

实验五:可唤醒停机期间的工作任务

anacron 可以处理关机状态时未执行的计划任务,anacron不能指定何时执行某项任务,而是以天为单位或是在开机后立刻进入anacron的操作(/etc/anacrontab)。它会去检测停机期间应该进行但是并没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值