`

第十六章 仅运行一次的工作排程(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
分享到:
评论
发表评论

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

相关推荐

    鸟哥Linux私房菜

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

    计算机应用技术(实用手册)

    第六章GHOST的备份与恢复 34 第七章 综合应用 44 一.文件的后缀名, *号任意的文件名 44 二.内存出错或是系统出错引起蓝屏 48 三.本机病毒删除不了,解决方法是把硬盘拆下来换到别台主机上进行杀毒,要求挂上去的...

    C2000系列DSP芯片串口读写方案与FlashPro2000编程器应用详解

    内容概要:本文详细介绍了基于TMS320F系列芯片的C2000串口读写方案及其编程器——FlashPro2000的功能特点和支持的接口模式。文中不仅涵盖了硬件连接的具体步骤,还提供了代码实例来展示Flash擦除操作,并对比了JTAG和SCI-BOOT两种模式的优缺点。此外,针对不同型号的C2000系列芯片,给出了详细的适配指导以及避免烧录过程中可能出现的问题的方法。 适合人群:从事DSP开发的技术人员,尤其是对TI公司C2000系列芯片有一定了解并希望深入了解其编程和烧录细节的人群。 使用场景及目标:适用于实验室环境下的程序调试阶段,以及生产线上的批量烧录任务。主要目的是帮助开发者选择合适的编程工具和技术手段,提高工作效率,减少因误操作导致设备损坏的风险。 其他说明:文中提供的代码片段和命令行指令可以直接用于实际项目中,同时附带了一些实用技巧,如防止芯片变砖的小贴士和自动化重试脚本,有助于解决常见的烧录难题。

    汉字字库存储芯片扩展实验通常是为了学习和理解如何在嵌入式系统或计算机硬件中增加或管理存储资源,特别是针对需要处理中文字符的应用 这类实验对于想要深入了解计算机体系结构、嵌入式开发以及汉字编码的学生和工

    汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现大容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)不等的存储空间 - 国标GB2312-80包含6763个汉字,需要较大存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit

    测控装备干扰源快速侦测系统设计研究.pdf

    测控装备干扰源快速侦测系统设计研究.pdf

    嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip

    嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip

    嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip

    嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip

    少儿编程scratch项目源代码文件案例素材-空间站.zip

    少儿编程scratch项目源代码文件案例素材-空间站.zip

    基于关联规则的商业银行个性化产品推荐.pdf

    基于关联规则的商业银行个性化产品推荐.pdf

    嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip

    嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip

    MATLAB仿真轴棱锥生成贝塞尔高斯光束及环形光束光强图像分析

    内容概要:本文详细介绍了利用MATLAB进行轴棱锥生成贝塞尔高斯光束及环形光束光强图像的仿真研究。首先阐述了实验的背景与目标,强调了MATLAB在光学和计算科学领域的广泛应用。接着,具体描述了实验的方法与步骤,包括材料准备、仿真过程中的参数设定和光束生成代码编写。最后,对实验结果进行了深入分析,展示了贝塞尔高斯光束和环形光束的光强分布特点,验证了其光学性能的预期表现。文章还对未来的研究方向和技术改进提出了展望。 适合人群:从事光学、物理学及相关领域研究的专业人士,特别是对光束生成和光学性能分析感兴趣的科研工作者。 使用场景及目标:适用于需要进行光束生成和性能分析的实验室环境,旨在帮助研究人员更好地理解和优化光束特性和传播行为。 其他说明:本文不仅提供了详细的实验方法和步骤,还附有丰富的实验结果和数据分析,为后续研究提供了宝贵的参考资料。

    三电平NPC型APF模型预测控制中滞环控制模块的应用与开关频率优化研究

    内容概要:本文探讨了三电平NPC型有源电力滤波器(APF)的模型预测控制(MPC)中存在的开关频率过高问题及其解决方案。传统MPC方法会导致极高的开关频率,增加了系统的能耗和热量。通过引入滞环控制模块,可以在不大幅牺牲性能的情况下有效降低开关频率。具体来说,滞环控制通过在价值函数计算后增加一个判断条件,对状态切换进行惩罚,从而减少不必要的开关动作。实验结果显示,开关频率从4392Hz降至3242Hz,降幅达26.2%,虽然电流总谐波畸变率(THD)略有上升,但仍符合国家标准。此外,文中还提出了动态调整滞环宽度的方法,以进一步优化不同负载条件下的表现。 适合人群:从事电力电子、电力系统控制领域的研究人员和技术人员,特别是关注APF和MPC技术的人群。 使用场景及目标:适用于需要优化APF系统开关频率的研究和工程项目,旨在提高系统效率并降低成本。目标是在不影响系统性能的前提下,显著降低开关频率,减少能量损失和热管理难度。 其他说明:文章不仅提供了理论分析,还包括具体的实现代码片段,有助于读者理解和实践。同时,强调了在实际应用中需要注意的问题,如中点电位漂移等。

    计算流体力学中三维POD DMD程序的原网格处理方法及应用

    内容概要:本文介绍了三维POD DMD程序在处理原网格数据方面的独特优势和技术细节。首先阐述了该程序能读取结构化和非结构化网格数据及其拓扑关系,在生成模态数据过程中保持原始网格形态而不需要进行网格插值操作。接着展示了简化版本的Python代码片段,揭示了读取网格数据和生成模态数据的核心逻辑。最后提到提供的辅助学习资料如代码、视频教程、Word教程和实例数据,帮助用户深入理解并掌握该程序的应用。 适合人群:从事计算流体力学领域的研究人员和技术爱好者,尤其是那些希望提高数据处理效率的人群。 使用场景及目标:适用于需要处理复杂网格数据的研究项目,旨在简化数据处理流程,提升工作效率,同时保持数据的原始特性。 其他说明:文中不仅提供了理论性的讲解,还有具体的代码示例和丰富的学习资源,使读者可以边学边练,快速上手。

    融合双向路由注意力的多尺度X光违禁品检测.pdf

    融合双向路由注意力的多尺度X光违禁品检测.pdf

    嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip

    嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip

    嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip

    嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip

    基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf

    基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf

    嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip

    嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip

    基于LWR问题的无证书全同态加密方案.pdf

    基于LWR问题的无证书全同态加密方案.pdf

    嵌入式八股文面试题库资料知识宝典-符坤面试经验.zip

    嵌入式八股文面试题库资料知识宝典-符坤面试经验.zip

Global site tag (gtag.js) - Google Analytics