『学了就忘』Linux系统管理 — 8.系统定时任务(at命令)

定时任务是在服务器上常用到的一个工作。

在你指定的时间,系统会自动执行你指定的程序(脚本或者命令)。

Linxu系统中的定时任务不难,关键是如何写出正确的脚本。

在Linxu系统中,有三种用于任务调度的工具

  • at命令调用atd服务
  • crontab命令调用cron(crond)服务。
  • anacron工具。

(一)只执行一次的定时任务

需使用at命令。

at命令是一次性执行的定时任务。也就是说我在之后什么时间点,执行一次任务。

1、at服务管理

at命令要想正确执行,需要atd服务的支持。

atd服务是独立的服务,所以启动的命令如下:

[root@localhost ~]# service atd start

提示:

只要你的Linux系统是安装的,哪怕是最小化安装,at命令和cron命令默认都是启动的。

我们发现大多数服务最后都有个d,这个d代表Daemon(守护进程)的意思。

# 查看Linux系统中的进程
# 注意:第二行/usr/sbin/atd,才是atd服务。
[root@localhost ~]# ps aux | grep atd
rpcuser    1425  0.0  0.0  23352  1380 ?        Ss   06:15   0:00 rpc.statd
root       1881  0.0  0.0  21108   496 ?        Ss   06:15   0:00 /usr/sbin/atd
root       3332  0.0  0.0 103332   852 pts/2    S+   09:29   0:00 grep atd

如果想要让atd服务开机时自动启动,可以设置如下命令:

[root@localhost ~]# chkconfig atd on

2、at命令的访问控制

atd服务启动之后,at命令才可以正常使用,我们还要学习下at命令的访问控制。

这里的访问控制指的是允许哪些用户使用at命令设定定时任务,或者不允许哪些用户使用at命令。

大家可以想象成为设定黑名单或设定白名单,这样更容易理解。at的访问控制是依靠/etc/at.allow文件(白名单)和/etc/at.deny文件(黑名单)这两个文件来实现的。

注:Linux系统中默认是没有/etc/at.allow文件的,用到的时候需要自己手动创建。

具体规则如下:

  1. 如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令,其他用户不能使用at命令(/etc/at.deny文件会被忽略,也就是说同一个用户既写入/etc/at.allow文件,也写入/etc/at.deny文件,那么这个用户是可以使用at命令的,因为/etc/at.allow文件优先级更高。)。

  2. 如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令,其他用户可以使用at命令。不过这个文件对root用户不生效。

  3. 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。

  4. 系统中默认时只有/etc/at.deny文件,而且这个文件是空的,这样的话系统中所有的用户都可以使用at命令。不过如果我们打算控制用户的at命令权限,把用户写入/etc/at.deny文件即可。

  5. /etc/at.allow文件的权限更高,如果/etc/at.allow文件存在,则/etc/at.deny文件失效。

    /etc/at.allow管理行为更加严格,因为只有写入这个文件的用户才能使用at命令,如果需要禁用at命令的用户较多,则可以把少数用户写入这个文件。

    /etc/at.deny文件的管理较为松散,如果允许使用at命令的用户较多,则可以把禁用的用户写入这个文件。

    不过这两个文件都不能对root用户生效。

3、at命令

  • 格式如下:

    [root@localhost ~]# at [选项] 时间
    
    选项:
      -m:当at命令工作完成后,无论是否命令有输出,都用email通知执行at命令的用户。
      -c工作号:显示该at工作的实际内容。
      
    时间:
      at支持的时间格式如下:
      HH:ММ       在指定的“小时:分钟”执行命令,例如:05:30。
      HH:MM YYYY-MM-DD        在指定的“小时:分钟 年-月-日”执行,例如05:30 2020-06-26。
      HH:MM[am|pm][month][date]       在指定的“小时:分钟[上午|下午][月][日]“执行,例如05:30 July 25。
      HH:MM[amlpm]+[minutes|hours|days|weeks]     在指定的时间“再加多久执行”,
              例now + 5 minutes,05am + 2 hours。
    

    at命令只要指定正确的时间,就可以输入需要在指定时间执行的命令了.这个命令可以是系统令,也可以是shell脚本。(也就是说确认命令的执行时间之后,按回车在输入你要执行的命令。)

  • 示例:

    # 1.编写一个shell脚本hello.sh
    [root@localhost ~]# cat /root/hello. sh
    #!/bin/bash 
    echo "hello world!!!!"
    
    # 2.使用at命令在某个时间点执行该脚本
    [root@localhost ~]# at now + 2 minutes 
    # 回车后,输入需要执行的命令
    # 把hello.sh脚本输入的内容,写入指定的文件中
    at> /root/hello.sh >> /root/hello.log
    # 使用ctrltd 保存at任务
    at> <EOT>
    job 1 at 2020-06-25 18:58
    # 会提示你,第1个at任务,会在2020年6月25日18:58分执行
    # 这个1代表工作号
    
  • 查询指定的定时任务

    # 查询第1个at任务的内容
    # 可以看到at执行的任务内容
    [root@localhost ~]# at -c 1(工作号)
    # 可以看到有很多的内容
    # 前面主要是定义系统的环境变量
    # 最后面的
    /root/hello.sh >>/root/hel1o.1og
    

    提示:我们可以通过下面的atq命令查看到,Linux系统中at任务列表中,你所需要任务的工作号,然后在通过at -c (工作号)命令来查看一个at任务的具体内容。

  • 在一个at任务中执行多个系统命令

    # 在指定的时间关机。
    [root@localhost ~]# at 02:00 2020-06-26
    at> /bin/sync
    at> /sbin/shutdown -h now
    at> <EOT>
    job 1 at 2020-06-26 02:00
    

4、其他at管理命令

at还有查询(atq)命令和删除(atrm)命令。

命令如下:

# 1.查询当前服务器上的at工作
[root@localhost ~]# atq

例如:
# 说明:root用户有一个at在务在2020年6月25日的18:58执行,工作号是1
[root@localhost ~]# atq
1       2020-06-25 18:58 a root
# 通过atq命令查看at定时任务,只能看到工作号,执行时间,哪个用户执行
# 但是看不到具体执行的命令是什么,


# 2.删除指定的at在务
[root@localhost ~]# atrm [工作号]

例如:
# 删除1号at任务,然后通过atq命令查询就没有at任务存在了
[root@localhost ~]# atrm 1

5、总结

at命令平时用的并不多,因为at任务只能够执行一次任务。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351