脚本crontab

crontab  时间:2021-01-12  阅读:()

版权所有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总结在本文中,我们了解了如何在无人参与的脚本中运行命令、捕获输出和监视脚本中不同命令的执行.
可以通过很多方式对信息进行记录(例如,按命令记录或全盘记录),并检查和报告进度.

Linode十八周年及未来展望

这两天Linode发布了十八周年的博文和邮件,回顾了过去取得的成绩和对未来的展望。作为一家运营18年的VPS主机商,Linode无疑是有一些可取之处的,商家提供基于KVM架构的VPS主机,支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,所有机器提供高出入网带宽,最低仅$5/月($0.0075/小时)。This month marks Linod...

物语云-VPS-美国洛杉矶VPS无限流量云windows大带宽100M不限流量 26/月起

物语云计算怎么样?物语云计算(MonogatariCloud)是一家成立于2016年的老牌国人商家,主营国内游戏高防独服业务,拥有多家机房资源,产品质量过硬,颇有一定口碑。本次带来的是特惠活动为美国洛杉矶Cera机房的不限流量大带宽VPS,去程直连回程4837,支持免费安装Windows系统。值得注意的是,物语云采用的虚拟化技术为Hyper-v,因此并不会超售超开。一、物语云官网点击此处进入物语云...

ftlcloud(超云)9元/月,1G内存/1核/20g硬盘/10M带宽不限/10G防御,美国云服务器

ftlcloud怎么样?ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。点击进入:ftlcloud官方网站...

crontab为你推荐
广东虚拟主机有什么便宜又好用的虚拟主机吗?网络服务器租用网络公司租用什么服务器好(想开个网络公司,租用服务器,但是不知道哪个好?什么价位?求高手指导。)域名服务商域名服务商所属区域怎么填写国外主机空间2个国外主机空间,都放了BLOG,看看哪个更快?深圳网站空间深圳网站设计 哪家好一些?万网虚拟主机万网虚拟主机可以做几个网站虚拟主机99idc网站后台织梦系统重装、空间转移、及上传技巧有哪些?长沙虚拟主机长沙双线虚拟主机湖南稳定双线虚拟主机湖南双线主机租用推荐一个?www二级域名请问 www.aaa.bbb.com 是一级域名还是二级域名啊?能否备案?怎么备案?域名邮箱哪个免费域名邮箱最好
电信主机租用 主机屋 80vps rackspace http500内部服务器错误 lighttpd 网站实时监控 元旦促销 美国在线代理服务器 ftp免费空间 空间首页登陆 cxz 美国迈阿密 后门 阿里云个人邮箱 umax privatetracker ncp alexa世界排名 vim 更多