`

第十六章 仅运行一次的工作排程(at)

 
阅读更多
首先,我们先来谈谈单一工作排程的运行,那就是 at 这个命令的运行!

atd 的启动与 at 运行的方式

要使用单一工作排程时,我们的 Linux 系统上面必须要有负责这个排程的服务,那就是 atd 这个玩意儿。 不过并非所有的 Linux distributions 都默认会把他打开的,所以呢,某些时刻我们必须要手动将他激活才行。 激活的方法很简单,就是这样:

[root@www ~]# /etc/init.d/atd restart
正在停止 atd:                          [  确定  ]
正在启动 atd:                          [  确定  ]

# 再配置一下启动时就启动这个服务,免得每次重新启动都得再来一次!
[root@www ~]# chkconfig atd on


重点是那个『正在启动(或 starting)』项目的 OK 啦!那表示启动是正常的!这部份我们在第十八章会谈及。 如果您真的有兴趣,那么可以自行到 /etc/init.d/atd 这个 shell script 内去瞧一瞧先! ^_^。 至於那个 chkconfig ,你也可以使用 man 先查阅一下啊!我们第十八章再介绍啦!


at 的运行方式

既然是工作排程,那么应该会有产生工作的方式,并且将这些工作排进行程表中罗!OK!那么产生工作的方式是怎么进行的? 事实上,我们使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。

不过,并不是所有的人都可以进行 at 工作排程喔!为什么?因为安全的理由啊~ 很多主机被所谓的『绑架』后,最常发现的就是他们的系统当中多了很多的怪客程序 (cracker program), 这些程序非常可能运用工作排程来运行或搜集系统资讯,并定时的回报给怪客团体! 所以罗,除非是你认可的帐号,否则先不要让他们使用 at 吧!那怎么达到使用 at 的列管呢?

1.我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制呢! 加上这两个文件后, at 的工作情况其实是这样的:

2.先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

3.如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;

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

透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,由於假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。

实际运行单一工作排程

单一工作排程的进行就使用 at 这个命令罗!这个命令的运行非常简单!将 at 加上一个时间即可!基本的语法如下:

[root@www ~]# at [-mldv] TIME
[root@www ~]# at -c 工作号码
选项与参数:
-m  :当 at 的工作完成后,即使没有输出信息,亦以 email 通知使用者该工作已完成。
-l  :at -l 相当於 atq,列出目前系统上面的所有该使用者的 at 排程;
-d  :at -d 相当於 atrm ,可以取消一个在 at 排程中的工作;
-v  :可以使用较明显的时间格式列出 at 排程中的工作列表;
-c  :可以列出后面接的该项工作的实际命令内容。

TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
  HH:MM				ex> 04:00
	在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
  HH:MM YYYY-MM-DD		ex> 04:00 2009-03-17
	强制规定在某年某月的某一天的特殊时刻进行该工作!
  HH:MM[am|pm] [Month] [Date]	ex> 04pm March 17
	也是一样,强制在某年某月某日的某时刻进行!
  HH:MM[am|pm] + number [minutes|hours|days|weeks]
	ex> now + 5 minutes	ex> 04pm + 3 days
	就是说,在某个时间点『再加几个时间后』才进行。


老实说,这个 at 命令的下达最重要的地方在於『时间』的指定了!鸟哥喜欢使用『 now + ... 』 的方式来定义现在过多少时间再进行工作,但有时也需要定义特定的时间点来进行!底下的范例先看看罗!

范例一:再过五分钟后,将 /root/.bashrc 寄给 root 自己
[root@www ~]# at now + 5 minutes  <==记得单位要加 s 喔!
at> /bin/mail root -s "testing at job" < /root/.bashrc
at> <EOT>   <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束!
job 4 at 2009-03-14 15:38
# 上面这行资讯在说明,第 4 个 at 工作将在 2009/03/14 的 15:38 进行!
# 而运行 at 会进入所谓的 at shell 环境,让你下达多重命令等待运行!

范例二:将上述的第 4 项工作内容列出来查阅
[root@www ~]# at -c 4
#!/bin/sh               <==就是透过 bash shell 的啦!
# atrun uid=0 gid=0
# mail     root 0
umask 22
....(中间省略许多的环境变量项目)....
cd /root || {           <==可以看出,会到下达 at 时的工作目录去运行命令
         echo 'Execution directory inaccessible' >&2
         exit 1
}

/bin/mail root -s "testing at job" < /root/.bashrc
# 你可以看到命令运行的目录 (/root),还有多个环境变量与实际的命令内容啦!

范例三:由於机房预计於 2009/03/18 停电,我想要在 2009/03/17 23:00 关机?
[root@www ~]# at 23:00 2009-03-17
at> /bin/sync
at> /bin/sync
at> /sbin/shutdown -h now
at> <EOT>
job 5 at 2009-03-17 23:00
# 您瞧瞧! at 还可以在一个工作内输入多个命令呢!不错吧!


事实上,当我们使用 at 时会进入一个 at shell 的环境来让使用者下达工作命令,此时,建议你最好使用绝对路径来下达你的命令,比较不会有问题喔!由於命令的下达与 PATH 变量有关, 同时与当时的工作目录也有关连 (如果有牵涉到文件的话),因此使用绝对路径来下达命令,会是比较一劳永逸的方法。 为什么呢?举例来说,你在 /tmp 下达『 at now 』然后输入『 mail root -s "test" < .bashrc 』, 问一下,那个 .bashrc 的文件会是在哪里?答案是『 /tmp/.bashrc 』!因为 at 在运行时,会跑到当时下达 at 命令的那个工作目录的缘故啊!

有些朋友会希望『我要在某某时刻,在我的终端机显示出 Hello 的字样』,然后就在 at 里面下达这样的资讯『 echo "Hello" 』。等到时间到了,却发现没有任何信息在萤幕上显示,这是啥原因啊?这是因为 at 的运行与终端机环境无关,而所有 standard output/standard error output 都会传送到运行者的 mailbox 去啦!所以在终端机当然看不到任何资讯。那怎办?没关系, 可以透过终端机的装置来处理!假如你在 tty1 登陆,则可以使用『 echo "Hello" > /dev/tty1 』来取代。

at 有另外一个很棒的优点,那就是『背景运行』的功能了!什么是背景运行啊?很难了解吗?其实与 bash 的 nohup (第十七章) 类似啦! 鸟哥提我自己的几个例子来给您听听,您就了了!

离线继续工作的任务:鸟哥初次接触 Unix 为的是要跑空气品质模式, 那是一种大型的程序,这个程序在当时的硬件底下跑,一个案例要跑 3 天!由於鸟哥也要进行其他研究工作,因此常常使用 Windows 98 来连线到 Unix 工作站跑那个 3 天的案例!结果你也该知道, Windows 98 连开三天而不死机的机率是很低的~@_@~ 而死机时,所有在 Windows 上的连线都会中断!包括鸟哥在跑的那个程序也中断了~呜呜~明明再三个钟头就跑完的程序, 由於死机害我又得跑 3 天!

另一个常用的时刻则是例如上面的范例三,由於某个突发状况导致你必须要进行某项工作时,这个 at 就很好用啦!

由於 at 工作排程的使用上,系统会将该项 at 工作独立出你的 bash 环境中, 直接交给系统的 atd 程序来接管,因此,当你下达了 at 的工作之后就可以立刻离线了, 剩下的工作就完全交给 Linux 管理即可!所以罗,如果有长时间的网络工作时,嘿嘿! 使用 at 可以让你免除网络断线后的困扰喔! ^_^

at 工作的管理

那么万一我下达了 at 之后,才发现命令输入错误,该如何是好?就将他移除啊!利用 atq 与 atrm 吧

[root@www ~]# atq
[root@www ~]# atrm (jobnumber)

范例一:查询目前主机上面有多少的 at 工作排程?
[root@www ~]# atq
5       2009-03-17 23:00 a root
# 上面说的是:『在 2009/03/17 的 23:00 有一项工作,该项工作命令下达者为 
# root』而且,该项工作的工作号码 (jobnumber) 为 5 号喔!

范例二:将上述的第 5 个工作移除!
[root@www ~]# atrm 5
[root@www ~]# atq
# 没有任何资讯,表示该工作被移除了!


如此一来,你可以利用 atq 来查询,利用 atrm 来删除错误的命令,利用 at 来直接下达单一工作排程!很简单吧! 不过,有个问题需要处理一下。如果你是在一个非常忙碌的系统下运行 at , 能不能指定你的工作在系统较闲的时候才进行呢?可以的,那就使用 batch 命令吧!

batch:系统有空时才进行背景任务

其实 batch 是利用 at 来进行命令的下达啦!只是加入一些控制参数而已。这个 batch 神奇的地方在於:他会在 CPU 工作负载小於 0.8 的时候,才进行你所下达的工作任务啦! 那什么是负载 0.8 呢?这个负载的意思是: CPU 在单一时间点所负责的工作数量。不是 CPU 的使用率喔! 举例来说,如果我有一只程序他需要一直使用 CPU 的运算功能,那么此时 CPU 的使用率可能到达 100% , 但是 CPU 的工作负载则是趋近於『 1 』,因为 CPU 仅负责一个工作嘛!如果同时运行这样的程序两支呢? CPU 的使用率还是 100% ,但是工作负载则变成 2 了!了解乎?

所以也就是说,当 CPU 的工作负载越大,代表 CPU 必须要在不同的工作之间进行频繁的工作切换。 这样的 CPU 运行情况我们在第零章有谈过,忘记的话请回去瞧瞧!因为一直切换工作,所以会导致系统忙碌啊! 系统如果很忙碌,还要额外进行 at ,不太合理!所以才有 batch 命令的产生!

那么 batch 如何下达命令呢?很简单啊!与 at 相同啦!例如下面的范例:

范例一:同样是机房停电在 2009/3/17 23:00 关机,但若当时系统负载太高,则暂缓运行
[root@www ~]# batch 23:00 2009-3-17
at> sync
at> sync
at> shutdown -h now
at> <EOT>
job 6 at 2009-03-17 23:00

[root@www ~]# atq
6       2009-03-17 23:00 b root
[root@www ~]# atrm 6


你会发现其实 batch 也是使用 atq/atrm 来管理的!这样了解乎?


转自:http://vbird.dic.ksu.edu.tw/linux_basic/0430cron_2.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    python定时任务 每天运行一次.md

    python定时任务 每天运行一次 在 Python 中可以使用 schedule 模块来实现定时任务。以下是一个每天运行一次的例子: import schedule import time def job(): print("I'm running at 5:00am every day.") # 设定...

    Linux 指令篇日期时间排程

    ### Linux 指令篇:日期时间排程 本文旨在介绍 Linux 系统中的两个重要命令:`touch` 和 `at`。这两个命令都与日期和时间管理有关,但它们的功能各有侧重。`touch` 命令主要用于更改文件的时间戳,而 `at` 命令则...

    at_2020_11_4_AT工具箱_AT工具箱例程运行需要的exe文件_

    "at_2020_11_4_AT工具箱_AT工具箱例程运行需要的exe文件_" 这个标题表明我们关注的是一个与"AT工具箱"相关的资源包,具体是2020年11月4日版本的。标题中的“_工具箱例程运行需要的exe文件_”提示我们这个压缩包包含...

    第8章 AT89S51 扩展存储器.ppt

    程序存储器用于存放可执行的机器指令,而数据存储器用于存储程序运行过程中的变量和数据。AT89S51内部自带4KB的程序存储器和256B的数据存储器。当这些内部资源不足时,就需要扩展外部存储器。 对于程序存储器,其...

    关于AT89C51 与 AT89S51/52 的区别

    而AT89C51则仅支持传统的并行编程方式,这需要一个专门的编程器,并且通常需要将单片机从电路板上取下。 其次,AT89S51的工作频率较AT89C51更高。AT89S51的极限工作频率可达33MHz,相比之下AT89C51的极限工作频率为...

    at24c16_STM32at24c16程序_

    标题中的“at24c16_STM32at24c16程序_”表明这是一个关于使用STM32微控制器与AT24C16 EEPROM进行交互的程序。AT24C16是一款常见的I²C接口的电可擦可编程只读存储器(EEPROM),通常用于在嵌入式系统中存储小量非易...

    第10章AT89S51 键盘显示器接口.ppt

    第10章主要介绍了AT89S51单片机与键盘、显示器接口的设计和原理。以下是详细的知识点概述: 1. **LED数码管的显示原理** - LED数码管通常由8个二极管组成,形成“8”字形结构,分为共阴极和共阳极两种类型。 - 共...

    鸟哥Linux私房菜

    at用于调度一次性任务,atq用于查看已排程的任务列表,atrm则用于删除已排程的任务。 7. **auditd/audit2why**:在第十七章第5.5节中解释。auditd服务用于记录系统安全事件,而audit2why则是用于分析audit日志中的...

    第6章AT89S51 定时器计数器.ppt

    AT89S51是一款广泛应用的微控制器,其内部集成了两个可编程的定时器/计数器,即T0和T1。这些定时器/计数器在工业检测与控制领域发挥着重要作用,能够执行计数或定时任务,比如对外部脉冲的计数或产生精确的定时间隔...

    Linux网络操作系统基础:一次性任务at.pptx

    Linux网络操作系统基础:一次性任务at.pptx 在 Linux 操作系统中,任务管理是一个至关重要的方面,特别是在系统运维过程中,可能需要在某个预设的时间执行特定任务,例如定时发送邮件、备份并清空日志文件等任务。...

    pCom.exe 串口工具 AT脚本 自动运行

    串口工具,支持多种波特率,可以监控串口状态,CTS,DSR,RLSD,RING, ...头部模块公司内测工具,支持AT脚本,支持AT命令返回内容判断,支持跳转。 支持直接调用windows命令 支持界面定制 支持功能定制

    能够在keil4下运行的AT91SAM9260示例程序(含工程文件)

    AT91SAM9260是一款基于ARM926EJ-S内核的微处理器,由Atmel公司生产,常用于嵌入式系统设计。它集成了多种外设,如ADC、UART、SPI、I2C、USB主机/设备端口、以太网MAC等,适合于各种工业和消费电子产品应用。Keil ...

    at自动测试工具,at命令介绍

    AT自动测试工具是一种在IT行业中广泛使用的自动化测试解决方案,它旨在简化系统管理和自动化任务执行的过程。AT命令,全称为“Automation Tool”,是该工具的核心组成部分,允许用户预设任务并在指定时间执行,从而...

    AT070TN94.rar_AT070TN94开发_AT070TN94电源_SCH_at070tn94_原理图

    AT070TN94是一款广泛应用在工业环境中的电阻式触摸屏控制器,其开发与电源设计对于理解电子设备中人机交互技术至关重要。本压缩包包含了一份关于AT070TN94的详细原理图(SCH),为工程师提供了一份宝贵的参考资料。 ...

    第2章-AT89S51单片机的片内硬件结构.ppt

    AT89S51单片机的定时器/计数器有2个16位的定时器/计数器,可以工作在四种模式下。 5. 串行口(UART): AT89S51单片机的串行口是一个全双工的异步串行口,具有四种工作方式。 6. 并行I/O口: AT89S51单片机有四个8...

    AT88SC0104C加密芯片的工作原理.doc

    AT88SC0104C 工作原理, 如何进行加密, 熔断、 读取加密。。。

    LTE特殊AT命令使用

    在LTE网络中,AT命令是一种常用的接口控制工具,允许用户或设备进行参数配置和状态查询。本文主要聚焦于“LTE特殊AT命令使用”,探讨如何利用这些命令来优化UE(User Equipment,用户设备)的性能和功能。 首先,UE...

    AT1846SProgrammingGuide14.620764667.pdf_datasheet_AT1846S_at1846

    AT1846S是一款高性能、高集成度的微控制器,广泛应用于各种嵌入式系统设计。这篇编程指南和数据手册提供了关于AT1846S芯片的详细信息,包括其功能特性、电气规格、引脚配置、接口描述以及编程指南,是开发者理解和...

    一个AT指令解析框架,mark一下

    AT指令解析框架是一种用于处理和解析AT(Attention)指令的软件工具,广泛应用于通信设备,如GSM/GPRS模块、蓝牙模块、Wi-Fi模块等。AT指令是串行通信中的控制命令,允许用户通过简单的文本命令与硬件进行交互,设置...

Global site tag (gtag.js) - Google Analytics