脚本控制------------------------(at命令mail命令batch命令cron表格anacron表格)
Posted WEL测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本控制------------------------(at命令mail命令batch命令cron表格anacron表格)相关的知识,希望对你有一定的参考价值。
5.5 定时运行脚本
在处理脚本时,总会遇到需要在给定时间运行脚本。Linux系统提供3中方式在预定时间运行脚本:at命令、batch命令、cron表格。每种方法使用不同的技术调度运行脚本的时间和频率。
5.5.1使用at命令调度作业
at命令允许指定Linux系统运行脚本的时间。at命令将作业提交到一个队列,并指示shell在何时运行该作业。另一个命令atd以后台模式运行,并检查作业队列以运行作业。大部分Linux发行版都可以在启动时自动启动该特性。
atd命令检查系统上的特殊目录,以便运行使用at命令提交的作业。默认情况下,atd命令每隔60秒检查一次该目录。如果存在作业,atd命令检查运行作业的时间。如果时间与当前时间匹配,则atd命令将运行该作业。
1.at命令格式
at命令的基本格式很简单:at [-f filename] time。默认情况下,at命令将STDIN的输入提交到队列。可以使用-f参数指定用于读取命令的的文件名(脚本参数)。
time参数指定Linux系统运行作业的时间。at命令可以识别各种时间格式:
l 标准的小时和分钟格式,比如10:15
l AM/PM指示符,比如10:15PM
l 具体指定的时间,比如now、noon、midnight、teatime(4PM)
如果指定一个已经过去的时间,at命令将在第二天的那个时间运行作业。
除了指定运行作业的时间之外,还可以包括具体的日期,可以使用各种格式的日期:
l 标准的日期格式,比如:MMDDYY、MM/DD/YY、DD.MM.YY
l 文本日期格式,比如Jul4、Dec 25,没有年份也可以
l 还可以指定时间增量:Now +25 minutes、10:15PM tomorrow、10:15 +7days
使用at命令时,作业将提交到作业队列中。作业队列保存at命令提交的作业以便处理。有26种不同的作业对垒可用于不同的优先级水平。使用小写字母a到z引用作业队列。默认情况下,所有的at作业都提交到作业队列a,即优先级最高的队列。如果希望以较低的优先级运行作业,则可以使用-q参数指定字母。
2.获取作业输出
作业在Linux系统运行时,没有与该作业关联的监视器。Linux使用提交作业的用户的电子邮箱地址作为STDOUT和STDERR。任何以STDOUT和STDERR为目的的输出都将通过邮件系统发送给用户。
如果系统没有安装at、mail命令使用命令:sudoapt-get install at、sudo apt-get install mail。进行安装。
以下是使用at命令调度作业运行的一个简单示例:
at命令生成一个警告消息,指出系统使用什么shell运行脚本(默认shell分配给/bin/sh,对于Linux就是bash shell),分配给作业的作业编号以及作业计划运行的时间。
作业完成时,监视器上不会显示任何内容,但是系统将生成一个电子邮件消息。电子邮件消息显示脚本生成的输出。如果脚本没有生成输出,则默认情况下不会生成电子邮件消息。可以使用at命令的-m选项更改特性。在脚本没有生成任何输出的情况下,该选项可以生成一个电子邮件消息,指示作业已完成。
通过上图可知道,列出排队的作业的命令格式:atq [-V] [-q queue]。
移除命令格式:atrm [-V] job [job...] 或at [-rd] job [job...]。job代表job编号。
5.5.2使用batch命令调
batch命令的作用不是安排脚本在预设的时间运行,而是安排脚本在系统使用率低时运行。如果Linux系统正处于高负载水平,batch命令将延迟提交作业,知道系统负载降低为止。
batch命令检查Linux系统当前的平均负载水平。如果水平低于1.5或低于atd命令中指定的值,它将运行任何在作业队列中等待的作业。batch命令的命令格式如下:
batch[-f filename] [time]。默认情况下batch命令从STDIN读取命令,可以使用-f参数指定读取命令文件。还可以指定batch命令应该运行作业的最早时间。
本人下载这个版本,batch不带有参数,只能从STDIN读取命令。
5.5.3 调用定期脚本
Linux系统使用cron程序调度需定期运行的job。corn程序在后台运行,它从特殊表格(corn表格)中查找需要调度运行的作业。
1.cron表格
cron表格使用特殊格式指定作业运行时间。cron表格的格式如下:
min hour dayofmonth month dayofweek command
cron表格可以将条目指定为具体的值、一定范围的值(如 1-5)或通配符(*)。例如,如果希望每天10:15运行命令,可以使用以下corn表格项:15 10 * * * command。
dayofweek项可以是3字符的文本值(mon、tue、wed、thu、fri、sat、sun),也可以是数字:0标识星期天,6表示星期六。
dayofmonth项指定每个月的日期值(1-31)。
PS:因为每个月份不同,所以如何设置一个命令在每个月的最后一天执行呢?一种常用的方法是添加:if-then语句,该语句使用date命令检查明天是否是1号:
00 12 * * * if [ `date +%d -d tomorrow` =01 ] ; then ; command
通过if判断明天是否为01,如果是则执行命令。这将在每天的12点查看本日是否是该月的最后一天,如果是,它将运行命令。
命令列表必须制定要运行的命令或shell脚本的完整路径名。可以根据需要添加任何命令行参数或者重定向符号。
cron程序使用提交作业的用户账户运行脚本。因此必须拥有相应的权限才能访问命令行列表中的指定的命令和输出文件。
2.构建cron表格
每个系统用户都可以拥有自己的cron表格以及运行安排好的作业。Linux提供crontab命令处理cron表格。要列出现有的cron表格,使用-l参数。
默认情况下,每个用户的cron表格文件都不存在。要向cron表格添加条目,可以使用-e参数。这样做时,crontab命令自动启动vi编译器处理向右的cron表格(如果没有,则创建一个空文件)。
cron的操作实例如下:
使用crontab -e命令,如果没有创建,会提示选择相应的编辑工具,然后进入文件,添加corn表格格式的信息文件!然后保存退出,到达指定时间邮箱会收到消息提醒。
3.anacron程序
使用cron程序存在的唯一一个问题是,它假定Linux系统每天运行24小时,每周运行7天。只有在服务器环境中运行Linux时才能发生这种情况。
如果在使用cron程序调度作业时Linux系统处于关闭状态,则作业将无法运行。cron程序无法再系统打开后重新运行错过的作业。
anacron程序使用时间戳确定调度的作业是否在正确的时间间隔运行。如果它确定某个作业错过了调度的运行时间,它将自动尽快的运行该作业。
该特性对于执行日志维护的脚本非常有用。如果系统在应该运行脚本时总是关机,则日志文件将得不到清理,文件大小可能会不断增大。使用anacron可以保证日志文件至少在每次系统启动的时清理一次。
anacron程序使用自己的表格(通常位于/etc/anacrontab)指定作业。在大部分Linux发行版本,该表格仅供根用户使用。anacron表格的格式:period delay identifiercommand
period项定义作业应该间隔多久运行一次,一天为单位。delay项指定在anacron程序确定应该运行一个命令之后需要多长时间才会实际运行该命令。该选项可以为不同的命令设置不同的延时,以防止所有命令在一打开Linux系统时运行。
identifier项是一个唯一的非空字符串,可以唯一地标识日志消息和错误电子邮件中的作业。
以上是关于脚本控制------------------------(at命令mail命令batch命令cron表格anacron表格)的主要内容,如果未能解决你的问题,请参考以下文章
Shell 脚本 ”read 读取控制台输入” 与 “函数”