Linux的例行性工作

Posted 小茗,你好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的例行性工作相关的知识,希望对你有一定的参考价值。

目录

单一执行的例行性工作

1、at 的实际工作过程如下

2、工具介绍

3、实验:定义三分钟之后显示hello

循环执行的例行性工作

1、工作过程

2、工具介绍

3、实验


linux例行性工作:

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

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

单一执行的例行性工作

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

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

1、at 的实际工作过程如下

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

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

2、工具介绍

格式:at [-mldv] TIME

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

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

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

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

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

-f从文件中读取作业

TIME 时间格式,定义执行这项工作的时间,格式有:

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

HH:MM YYYY-MM-DD

3、实验:定义三分钟之后显示hello

进入到 /var/spool/at/ 目录下:

at now + 3 minutes

atq可以查看目前主机上有多少的at工作调度

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

查看:

 3 minutes 后会自动弹出 hello world 提醒

 

循环执行的例行性工作

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

1、工作过程

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

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

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

2、工具介绍

格式: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

3、实验

(1)每天早上9点整说good morning

如果不会写可查看示例文件:vim /etc/crontab 

[root@localhost cron]# crontab -e,进入进行编辑,内容如下:

0 9 * * * wall "good morning"

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

(2)指定某些用户不可以执行计划任务

分别在下面两个文件中添加上拒绝执行计划任务的用户

/etc/at.deny       /etc/cron.deny

用 vim 进行编辑:(限制某个用户进去直接写上该用户的名称即可)

vim /etc/at.deny

vim /etc/cron.deny

(3)系统的例行性任务

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

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

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

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

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



* * * * * user-name command to be executed

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

例如:(用 root 来执行命令)

 

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

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

创建目录,并在该目录下编辑多个脚本:

给所有使用者都必须加一个可执行的权限:

然后 vim /etc/crontab,用 run-parts 来执行

等到所设定的时间会执行该目录下的所有脚本:

 

补充:

anacron:可唤醒停机期间的工作任务

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

以上是关于Linux的例行性工作的主要内容,如果未能解决你的问题,请参考以下文章

第十六章例行性工作排程 (crontab)

Linux例行性工作排程 (crontab)

linux例行性任务(定时作业)

一起来学linux:例行性任务之at和crontab

例行性工作 排程(crontab)

linux计划任务