脚本rsync

rsync  时间: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'rootrsync失败,则子外壳将继续运行下一个命令.
不过,有时候可能会希望在命令失败时即停下,因为继续执行会带来更大的损害.
通过设置errexit,子外壳将直接在第一个命令停止时终止.
设置选项和确保安全性自动化脚本的另一个问题是,确保脚本的安全性,特别是确保脚本不会由于配置不正确而失败.
可以为此进程使用外壳选项.
您可能希望以独立于外壳的方式设置其他选项(通常,外壳选项越丰富,就越方便跟踪这些实例).
例如,在Bash外壳中,-u可确保将任何未设置的变量作为错误处理.
这可用于确保无人参与脚本不会在未正确配置所需变量的情况下尝试执行.
-C选项(noclobber)可确保在文件已经存在的情况下不会覆盖文件,而且能够防止脚本覆盖其不应该访问的文件(例如系统文件),除非脚本首先采用正确的命令将原始文件删除.

其中每个选项都可以使用set命令设置(请参见清单10).
清单10.
使用set命令设置选项set-eset-C可以在选项前使用加号(+)将其禁用.
可能希望改进脚本的安全性和环境的另一个领域是使用资源限制.
可以使用ulimit命令设置资源限制,此命令通常特定于外壳,允许对文件大小、内核、内存使用甚至脚本的持续时间进行限制,以确保脚本不会失控.
例如,可以使用以下命令以秒为单位设置CPU时间:developerWorksibm.
com/developerWorks/cn/系统管理工具包:构建无人参与的智能脚本第6页,共11ulimit-t600尽管ulimit并不提供全面的保护,但可帮助处理脚本可能失控的情况,或程序突然使用大量内存而可能导致问题的情况.
捕获错误我们已经了解了如何跟踪错误、输出和创建能够通过电子邮件发送到相应人员的日志,但如果要进一步具体到错误和响应,又该如何处理呢此处可以使用两个工具.
第一个是命令的返回状态,第二个是外壳中的trap命令.
命令的返回状态可用于确定特定的命令是否正确运行,或者是否生成了某种类型的错误.
具体返回状态代码的准确含义对特定命令是唯一的(请访问其手册页),但大家通常接受的原则是,错误代码为0表示命令已正确执行.
例如,假定您希望在尝试创建目录时跟踪错误.
可以在mkdir之后检查$,然后通过电子邮件发送输出,如清单11中所示.
清单11.
跟踪返回状态ERRLOG=/tmp/$$.
errmkdir/tmp2>>$ERRLOGif[$-ne0]thenmailx-s"Scriptfailedwhenmakingdirectory"adminmailerror.
log如果没有其他错误,mailerror.
log文件将为空,并将发送包含错误信息的电子邮件.
developerWorksibm.
com/developerWorks/cn/系统管理工具包:构建无人参与的智能脚本第8页,共11总结在本文中,我们了解了如何在无人参与的脚本中运行命令、捕获输出和监视脚本中不同命令的执行.
可以通过很多方式对信息进行记录(例如,按命令记录或全盘记录),并检查和报告进度.

IMIDC日本多IP服务器$88/月起,E3-123x/16GB/512G SSD/30M带宽

IMIDC是一家香港本土运营商,商家名为彩虹数据(Rainbow Cloud),全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。目前主机商针对日本独立服务器做促销活动,而且提供/28 IPv4,国内直连带宽优惠后每月仅88美元起。JP Multiple IP Customize...

RackNerd新上圣何塞、芝加哥、达拉斯、亚特兰大INTEL系列,$9.49/年

racknerd怎么样?racknerd商家最近促销三款美国便宜vps,最低只需要9.49美元,可以选择美国圣何塞、西雅图、纽约和芝加哥机房。RackNerd是一家成立于2019年的美国高性价比服务器商家,主要从事美国和荷兰数据中心的便宜vps、独立服务器销售!支持中文工单、支持支付宝和微信以及PayPal付款购买!点击直达:racknerd官方网站INTEL系列可选机房:加利福尼亚州圣何塞、芝加...

随风云-内蒙古三线BGP 2-2 5M 25/月 ,香港CN2 25/月 ,美国CERA 25/月 所有云服务器均支持5天无理由退款

公司成立于2021年,专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、三线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新”的价值观,坚持”以微笑收获友善, 以尊重收获理解,以责任收获支持,以谦卑收获成长”的行为观向客户提供全面优质的互...

rsync为你推荐
域名代理现在做域名代理好做吗?还能赚到钱吗?免费国外空间哪里的国外免费空间好?域名购买如何申请购买 永久域名域名购买如何购买域名?虚拟空间哪个好国内哪个空间商(虚拟主机)最好网站空间商网站空间商的选择??深圳网站空间深圳网站设计 哪家好一些?手机网站空间我想建一手机网站,那位推荐一个域名便宜点的手机建站网址,空间小也没关系。免备案虚拟主机免备案的虚拟主机在哪买好apache虚拟主机用的apache配置的虚拟主机,只有第一个能打开,别的是一直等待到超时,但是在服务器能正常打开。
厦门虚拟主机 如何注册域名 vps优惠码cnyvps wordpress主机 海外服务器 网通服务器ip 国内php空间 合租空间 老左来了 南通服务器 php空间购买 美国在线代理服务器 国外免费asp空间 免费cdn 国外ip加速器 环聊 中国电信网络测速 畅行云 学生机 .htaccess 更多