任务调度 (Ubuntu)
  kIM7GUNpnV3x 2023年11月02日 26 0

一:概述

  系Linux系统常常会自动执行一些日常任务。在Linux系统中,有许多的管理任务需要频繁的定时执行,比如日志文件的轮转、备份数据等。自己写的脚本程序也可以有效的帮助我们管理自己的系统,提高执行效率。有两种任务的调度方式crot和at。

二:cron调度方式

 (1)  cron这种任务调度方式使用crontab命令来循环执行设置任务,它依赖的服务是crond。使用这个服务器之前需要检查crond的状态是否处于运行的状态(active(running))。查看crond状态可以使用systemctl status crond命令,这个服务默认的情况下是处于运行状态的/演示结果如下图所示:


任务调度 (Ubuntu)_普通用户

    我这个里面的那个服务没有开启,所以一开始没有显示,如果你想开启这个服务就需要执行systemctl start cron命令注意没有那个d。如果你想停止这个任务,可以执行systemctl stop cron就可以了。它可以调度周期性的任务作业,它会按照不同的事件组合重复。

(2) 如果你想使用cron调度方式,在这之前需要了解一些与其相关的配置文件。普通用户使用crontab命令设置周期任务时,相关的设置会记录到/var/spool/cron目录下的文件中。这个目录下的文件可以使用普通用户权限创建每个用户都可以使用crintab命令来注册属于自己的crontab文件。每一行表示执行一个任务,每个字段表示一项设置。用户的crontab文件由6个字段组成,分别是分钟、小时、天、月、星期和命令。系统的crontab文件保存的地方和普通用户不同,/etc/crontab用来记录和系统相关的任务调度,这个文件只能由系统的管理员修改。系统的cronrab文件由七个字段组成,分别是分钟、小时、天、月、星期、用户名和命令,字段由空格进行分隔。

     系统的crontab文件和用户的crontab文件差不多,只是系统的crontab文件第六位指定的是用户名。/etv/crontab文件的内容并不长,使用cat命令可以查看里面记录的内容,演示如下图所示:


任务调度 (Ubuntu)_普通用户_02

  这个文件里面的内容,解释如下:

  • 第一行SHELL指定了系统要使用的Shell类型是bash。
  • 第二行PATH指定了执行文件的查找路径。
  • 第三行MAILTO指定crond的任务执行信息将通过电子邮件的形式发送给root用户。如果不指定用户,则表示不发送任务执行信息要给用户。

要记住普通用户和系统用户的crontab文件位置,这些文件和crond服务有关。

(3) 使用crontab命令设置周期性任务时,可以指定任意的时间组合crontab命令非常适合周期性的日志分析或者数据备份之类的工作。

命令格式:crontab [选项] [文件名]

  crontab命令的选项,如下表所示,这几个选项里面最常用就是-e选项,经常会用到-e选项去编辑crontab的任务内容。

选项

说明

-e

 编辑cronrab任务的内容

-l

显示crontab任务内容

-r

删除素有的crontab任务内容

-u

帮助其他用户创建或删除crontan任务内容(仅限root使用)

  在使用crontab命令编辑任务之前,还需要了解用户crontab文件里面的6个相关字段的含义:

字段

说明

分钟

0-59

小时

0-23

1-31

12

0-7(0或者7为星期日)

命令

指定需要执行的命令

  除了上面的6个字段外,有几个比较特殊的符号,如下表所示:

符号

说明

*(星号)

表示所有可能的值。比如日和月是*,就表示不论何月何日都会执行后续的命令

,(逗号)

表示分隔离散的数字

-(减号)

表示一个范围

/(正斜线)

指定时间的间隔频率

  知道了这些之后,下面使用crontab -e命令进入编辑界面,默认的使用vi编辑器。

比如设置10分钟显示一次当前的工作目录,然后把结果记录到文件/tmp/mytask中。第一个字段表示间隔10分钟,执行命令时使用绝对路径比较好

*10 * * * * * /bin/pwd > > /temp/mytask

  编辑好了之后,按下ESC键输入:wq保存并且退出。这样你就创建了一个循环任务。使用cronrab -l命令可以查看你编写的crontab任务的内容。

注意:如果是以普通用户创建这个任务,查看配置文件时需要使用root身份才可以。普通用户的cron记录可以才/var/spool/cron目录下查看。

使用tail -f命令可以实时的查看追加到文件中的信息,如果想结束查看可以使用Ctrl + c命令返回到命令提示符界面。

三:cron调度方式的限制

 cron调度方式的两个限制文件是/etc/cron.allow文件和/etc/cron.deny文件。第一个文件里面记录的是都是允许使用crontab的用户,第二个文件里面记录的是不能使用crontab的用户了。

默认情况下,所有的用户都能使用crontab。/etc/cron.allow文件的优先级高于/etc/cron.deny文件,如果这两个文件同时存在,就只有/etc/cron.allow文件生效。

如果你只想删除一个crontab任务,需要指定-e选项。想要删除所有的crontab任务直接使用crontab -r命令即可。

当你删除普通用户的crontab任务之后,再用root权限查看,/var/spool/cron目录属于Ubuntu用户的crontab文件也会被删除。想禁止Ubuntu用户使用crontab,直接使用vi编辑器在文件/etc/cron.deny中添加ubuntu这个用户名就行了,一个用户一行。

一旦禁止。这个用户不能使用crontab命令设置任务了。要想对用户进行限制操作,建议你在/etc/cron.deny文件中添加禁止用户的名单,因为系统默认保留这个文件。

还有一个和crontab相关的服务anacron,事先声明这个anacron服务并不替代crontab。anacron每天定期执行命令,由系统管理员设置并进行系统维护。anacron可以每天、每周、每月这样周期性的检测系统未执行的crontab任务。当机器关机重启后anacron程序会检查任务是否在周期内执行完毕,如果有未执行的任务,anacron会去执行这个任务,执行完毕之后它会自己停下来。anacron服务的配置文件是/etc/anacrontab,编辑配置文件的时候需要root权限。可以认为crontab是定时地去执行任务,过了这个时间就不会再去执行了。而anacron是定期地去执行任务,这个定期指的是一段周期性的时间。它们是可以同时存在的。

三:at调度

 at调度方式只能执行一次任务,它依赖的服务是atd。要查看这个服务的状态可以使用systemctl status atd命令,如果你的这个服务没有启动就使用命令systemctl enable atd开机,就会自动启动这个服务。at命令可以在指定的时间内仅执行一次命令。

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

at命令的选项如下表所示:

选项

说明

-f

制定具体的任务文件

-l

显示待执行任务列表,相当于atq

-d

删除指定的待执行任务

-m

任务执行完成之后向用户发送邮件

at只能在指定时间内执行一次,时间规格如下:

时间规格

说明

HH:MM

时:分,例如20:55,就表示晚上八点55分

midnight

表示午夜

noon

表示中午

now

表示目前的时间

teatime

表示下午4点的时间

am,.pm

am表示上午。pm表示下午

日期的设置方式:

日期规格

说明

MMDDYY、MM/DD/YY、MM.DD.YY

月日年。071422表示是2022年7月14日

today

表示今天

tomorrow

表示明天

还可以使用+这种方式指定关键字设置时间。如下表所示:

关键字

说明

now + 50 mintues

表示当前时间的50分钟之后执行


noon + 1 hour

表示在13:00执行命令

next week + 3 day2

表示10天后执行命令

  下面举个例子说明:

使用at命令设置在8分钟后将a命令输出到文件/tmp/setat中,命令为:at now +8 minutes..

使用atrm指定任务之后可以删除指定的执行的任务,还有atq命令可以查看执行任务。删除之后,可以看到已经没有等待执行任务了。

注意:像cron对用户有限制,at也一样。编辑/etc/at.allow和/etc/at.deny文件可以设置一般用户的执行权限,在/etc/at.allow文件中可以添加允许执行at命令的用户,/etc/at.deny文件里就是被拒绝使用at用户了。

使用at命令执行时,先在/etc/at.allow文件中设置,没有这个文件的情况下再去设置/etc/at.deny文件。如果这两个文件都没有,那就只有root用户可以使用root了。这连个文件里的这只用户和cron一样,一个用户占一行。































【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  G5UoiZ5izCEW   2023年11月13日   36   0   0 字段
  eHipUjOuzYYH   2023年11月13日   28   0   0 cssico字段
  L83A5jZvvg3Q   2023年11月22日   22   0   0 HTTP重定向字段
  L83A5jZvvg3Q   2023年11月22日   29   0   0 客户端HTTP字段
kIM7GUNpnV3x