脚本crontab用法

crontab用法  时间:2021-01-16  阅读:()

版权所有IBM公司2007商标系统管理工具包:构建无人参与的智能脚本第1页,共11系统管理工具包:构建无人参与的智能脚本MartinCBrown自由撰稿人和顾问MCslp2007年8月30日通过本文了解如何创建脚本来记录其输出、跟踪和标识错误及从错误和问题恢复,从而使其要么正确运行,要么失败并提供合适的错误消息和报告供分析.
构建脚本并自动运行是每个好的管理员必须进行的工作,但如何处理错误输出并就脚本应该如何处理这些错误做出明智决策呢本文将帮助您解决这些问题.
查看本系列更多内容关于本系列典型的UNIX管理员拥有一套经常用于辅助管理过程的关键实用工具、诀窍和系统.
存在各种用于简化不同过程的关键实用工具、命令行链和脚本.
其中一些工具来自于操作系统,而大部分的诀窍则来源于长期的经验积累和减轻系统管理员工作压力的要求.
本系列文章主要专注于最大限度地利用各种UNIX环境中可用的工具,包括简化异构环境中的管理任务的方法.
无人参与脚本的问题有很多关于无人参与脚本的问题,所谓无人参与脚本是指通过cron之类的服务或at命令自动运行的脚本.
例如,cron和at命令的默认模式是捕获脚本输出,然后将其通过电子邮件发送到运行脚本的用户.

您可能会不希望用户总是收到cron缺省发送的电子邮件(特别在一切都正常的情况下)——有时候运行脚本的用户和实际负责监视输出的不是同一个人.
因此,您需要更好的方法来跟踪和标识脚本中的错误,需要更好的方法来沟通问题,此外,还需要更好的方法来将结果告知适当的人员.
正确设置脚本非常重要;您需要确保脚本得到恰当配置,能够方便地进行维护,而且能够有效地运行.
还需要能够跟着错误和程序输出,并需要能够确保脚本的执行环境的安全性和有效性.
继续往下阅读,以了解如何进行所有这些工作.
设置环境在使用无人参与的脚本之前,需要确保恰当地设置了环境.
作为脚本的一部分,需要对各种元素进行显式配置,花时间进行此工作不仅能够确保脚本正确运行,而且还能够让脚本更易维护.

developerWorksibm.
com/developerWorks/cn/系统管理工具包:构建无人参与的智能脚本第2页,共11您可能需要考虑的事项包括:应用程序的搜索路径库的搜索路径目录位置创建目录或路径公用文件有些元素非常易于组织.
例如,可以在大部分兼容Bourne的外壳程序(sh、Bash、ksh和zsh)中使用以下命令设置路径:PATH=/usr/bin:/bin:/usr/sbin对于命令和文件位置,请直接在脚本的起始处设置一个对应的变量.
然后就可以在要使用文件名的地方使用此变量.
例如,当写入到日志文件时,可以使用清单1.
清单1.
写入日志文件LOGFILE=/tmp/output.
logdo_something>>$LOGFILEdo_another>>$LOGFILE通过设置一次名称,然后使用相应的变量,可以确保不会用错文件名,如果需要更改文件名,也只需要更改一次即可.
使用单个文件名和变量还非常便于创建复杂的文件名.
例如,通过使用date命令并提供格式规范可更方便地将日期添加到日志文件名中:DATE='date+%Y%m%d.
%H%M'上面的命令将以YYYYMMDD.
HHMM格式创建包含日期的字符串,例如,20070524.
2359.
可以将该日期变量插入文件名中,从而根据日志文件创建的日期对其进行标记.
如果未在日志文件名中使用日期/时间唯一标识符,则最好在两个脚本同时运行的情况下插入其他唯一标识符.
如果您的脚本从两个不同的进程写入相同文件,最后可能导致信息会被破坏,或丢失信息.
所有外壳程序都支持唯一外壳程序ID(基于外壳程序进程ID),可以通过特殊的$$变量名进行访问.
通过使用全局日志变量,可以方便地创建用于进行日志记录的唯一文件:LOGFILE=/tmp/$$.
err还可以将相同的全局变量原则应用于目录:LOGDIR=/var/log/my_app为了确保创建目录,请为mkdir使用-p选项,以创建希望使用的目录的完整路径:mkdir-p$LOGDIRibm.
com/developerWorks/cn/developerWorks系统管理工具包:构建无人参与的智能脚本第3页,共11幸运的是,如果目录已经存在,则此格式不会有任何问题,因而非常适合在无人参与的脚本中运行.
最后,通常最好在无人参与的脚本中使用完整路径名而不是相对路径,从而能将前面的原则与之结合使用.
清单2.
在无人参与的脚本中使用完整路径名DATE='date+%Y%m%d.
%H%M'LOGDIR=/usr/local/mcslp/logs/rsynclogmkdir-p$LOGDIRLOGNAME=$LOGDIR/$DATE.
log现在已经设置了环境,接下来让我们看看可以如何使用这些原则来帮助处理通用的无人参与脚本.

写入日志文件可能对脚本最简单的改进就是将脚本的输出写入日志文件.
您可能认为没有这个必要,但cron的缺省操作是保存所执行的脚本或命令的输出,然后将其通过电子邮件发送到拥有crontab或负责相关工作的人.
由于多方面的原因,这个方法并不完美.
首先,所配置的可能运行脚本的用户可能和需要处理输出的实际人员不是同一个人.
您可能会作为root运行脚本,不过运行时脚本或命令的输出要送到其他人那里.
如果希望将不同命令的输出发送到不同的用户,设置通用筛选器或重定向的方法并不会起作用.
第二个原因是更具有根本意义.
除非出现错误,否则就没有必要接收脚本的输出.
cron守护程序将发送stdout和stderr的输出,这意味着即使脚本成功执行,也会得到一个输出副本.
最后的原因是关于生成的信息和输出的管理和组织.
电子邮件并非总能够有效地记录和跟踪自动运行的脚本的输出.
您可能会只想保存成功的日志文件的存档,或在出现问题时将错误日志的副本以电子邮件方式发送出去.
可以采取多种方式进行写入日志文件的工作.
最简单的方式是将每个命令的输出重定向到文件中(请参见清单3).
清单3.
将输出重定向到文件cd/sharedrsync--delete--recursive.
/backups/shared>$LOGFILE如果希望将错误或标准输出组合为单个文件,请使用编号重定向(请参见清单4).
清单4.
将错误和标准输出组合到单个文件中cd/sharedrsync--delete--recursive.
/backups/shared>$LOGFILE2>&1清单4将信息写入到同一个日志文件中.
您还可能会希望将信息写入到不同的文件中(请参见清单5).
developerWorksibm.
com/developerWorks/cn/系统管理工具包:构建无人参与的智能脚本第4页,共11清单5.
将信息写入不同的文件中cd/sharedrsync--delete--recursive.
/backups/shared>$LOGFILE2>$ERRFILE对于多个命令的情况下,重定向可能会变得很复杂,而且可能会重复出现.
例如,您必须确保是将信息追加(而不是覆盖)到日志文件中(请参见清单6).
清单6.
将信息追加到日志文件cd/etcrsync--delete--recursive.
/backups/etc>>$LOGFILE>>$ERRFILE更为简单的方法(如果支持的话)是为一组命令使用内联块,然后作为整体重定向这个块的输出.

因此,可以使用清单8中的结构覆盖清单7中的行.
清单7.
冗繁的日志记录代码cd/sharedrsync--delete--recursive.
/backups/shared>$LOGFILE2>$ERRFILEcd/etcrsync--delete--recursive.
/backups/etc>>$LOGFILE2>>$ERRFILE清单8显示了分组命令的内联块.
清单8.
使用块进行日志记录{cd/sharedrsync--delete--recursive.
/backups/sharedcd/etcrsync--delete--recursive.
/backups/etc}>$LOGFILE2>$ERRFILE配对括号意味着子外壳,因此块中的所有命令将作为独立进程的一部分执行(尽管没有必要创建外壳,但所包含的块被作为不同逻辑环境对待).
通过使用子外壳,可以对整个块(而不是单个命令)的标准和错误输出进行集体重定向.
跟踪错误并报告子外壳的一个主要优势是,可以对脚本的主要内容进行包装,重定向错误然后发送包含脚本执行状态的具有特定格式的电子邮件.
例如,清单9显示了复杂的脚本,将在其中设置环境,执行实际命令和进程的大部分内容,跟踪输出,然后发送包含输出和错误信息的电子邮件.
清单9.
使用子外壳以电子邮件形式发送更为有用的日志LOGFILE=/tmp/$$.
logERRFILE=/tmp/$$.
errERRORFMT=/tmp/$$.
fmt{set-eibm.
com/developerWorks/cn/developerWorks系统管理工具包:构建无人参与的智能脚本第5页,共11cd/sharedrsync--delete--recursive.
/backups/sharedcd/etcrsync--delete--recursive.
/backups/etc}>$LOGFILE2>$ERRFILE{echo"Reportedoutput"echocat/tmp/$$.
logecho"Erroroutput"echocat/tmp/$$.
err}>$ERRORFMT2>&1mailx-s'Logoutputforbackup'root>$ERRLOGif[$-ne0]thenmailx-s"Scriptfailedwhenmakingdirectory"adminmailerror.
log如果没有其他错误,mailerror.
log文件将为空,并将发送包含错误信息的电子邮件.
developerWorksibm.
com/developerWorks/cn/系统管理工具包:构建无人参与的智能脚本第8页,共11总结在本文中,我们了解了如何在无人参与的脚本中运行命令、捕获输出和监视脚本中不同命令的执行.
可以通过很多方式对信息进行记录(例如,按命令记录或全盘记录),并检查和报告进度.

哪里购买香港云服务器便宜?易探云2核2G低至18元/月起;BGP线路年付低至6.8折

哪里购买香港云服务器便宜?众所周知,国内购买云服务器大多数用户会选择阿里云或腾讯云,但是阿里云香港云服务器不仅平时没有优惠,就连双十一、618、开年采购节这些活动也很少给出优惠。那么,腾讯云虽然海外云有优惠活动,但仅限新用户,购买过腾讯云服务器的用户就不会有优惠了。那么,我们如果想买香港云服务器,怎么样购买香港云服务器便宜和优惠呢?下面,云服务器网(yuntue.com)小编就介绍一下!我们都知道...

炭云188元/年,上海CN2 VPS/2核/384MB内存/8GB空间/800GB流量/77Mbps端口/共享IP

炭云怎么样?炭云(之前的碳云),国人商家,正规公司(哈尔滨桓林信息技术有限公司),主机之家测评介绍过多次。现在上海CN2共享IP的VPS有一款特价,上海cn2 vps,2核/384MB内存/8GB空间/800GB流量/77Mbps端口/共享IP/Hyper-v,188元/年,特别适合电信网络。有需要的可以关注一下。点击进入:炭云官方网站地址炭云vps套餐:套餐cpu内存硬盘流量/带宽ip价格购买上...

6元虚拟主机是否值得购买

6元虚拟主机是否值得购买?近期各商家都纷纷推出了优质便宜的虚拟主机产品,其中不少6元的虚拟主机,这种主机是否值得购买,下面我们一起来看看。1、百度云6元体验三个月(活动时间有限抓紧体验)体验地址:https://cloud.baidu.com/campaign/experience/index.html?from=bchPromotion20182、Ucloud 10元云主机体验地址:https:...

crontab用法为你推荐
免费注册域名有没有能够免费申请的域名??企业虚拟主机企业虚拟主机现在具体是多少价位?asp主机空间有ASP虚拟主机空间,还需要另外买Access数据库么?深圳网站空间菜鸟问:网站空间如何选择,与空间的基本知识?虚拟主机评测网哪里有可靠的免费虚拟主机虚拟主机控制面板我想问下虚拟主机的控制面板有哪些还不错的品牌呢?价格不能太高最好是性价比比较高一点就行了虚拟主机控制面板虚拟主机控制面板是什么?天津虚拟主机在天津哪个地方能买到较好的价格又实惠还可以送货上门的虚拟主机!北京虚拟主机虚拟主机 那个好用又实惠虚拟主机mysql在虚拟主机如何打开数据库?
华众虚拟主机管理系统 黑龙江域名注册 长沙服务器租用 如何注销域名备案 mach 地址大全 空间出租 admit的用法 域名评估 腾讯总部在哪 空间购买 smtp虚拟服务器 阿里云官方网站 英国伦敦 万网注册 1美元 带宽测试 服务器托管价格 沈阳idc register.com 更多