加载中…
个人资料
绝世流浪汉
绝世流浪汉
  • 博客等级:
  • 博客积分:0
  • 博客访问:86,140
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

【互联网运维技术】crontab 中使用"%"的问题

(2013-10-07 14:16:24)
标签:

linux

crontab

格式

it

分类: 互联网运维技术
昨晚在睡觉前最后一次检查nagios报警画面时无意间发觉一台服务器的硬盘空间已经达到warning临界点了,登录服务器后发现,原本设置对应用程序生成日志进行rotate,commpress,以及rm的一连串crontab脚本并没有被执行,于是查看日志,发现如下输出:
Oct  6 00:08:01 xxxx /USR/SBIN/CROND[31624]: (root) CMD (/bin/mv /var/log/varnishd/access_log /var/log/varnishd/access_log.`/bin/date +")     
Oct  6 00:08:01 xxxx /USR/SBIN/CROND[31623]: (root) CMDOUT (/bin/sh: -c: line 0: unexpected EOF while looking for matching ``')
Oct  6 00:08:01 xxxx /USR/SBIN/CROND[31623]: (root) CMDOUT (/bin/sh: -c: line 1: syntax error: unexpected end of file)
Oct  6 00:08:01 xxxx /USR/SBIN/CROND[31626]: (CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory
Oct  6 00:08:01 xxxx /USR/SBIN/CROND[31623]: (root) MAIL (mailed 125 bytes of output but got status 0x0001

从上面的出错信息可以看到,一个cmd被从中间截断了,查看/etc/cron.d下面的cron脚本文件后发现如下脚本存在:
 8 */2 * * * root /bin/mv /var/log/varnishd/access_log /var/log/varnishd/access_log.`/bin/date +"%Y%m%d%H"`00 && /usr/bin/killall -HUP varnishncsa

结合两者可以发现错误日志显示了上面的脚本在 `/bin/date +" 之后就被截断了,出现了语法错误。

翻看manpage 

 The  "sixth" field (the rest of the line) specifies the command to be run.  The entire command portion of the line, up to a new‐line or a "%" character, will be executed by /bin/sh or by the shell specified in the SHELL variable of  the  cronfile.   A  "%" character  in  the command, unless escaped with a backslash (\), will be changed into newline characters, and all data after thefirst % will be sent to the command as standard input.
 
原来是 % 这个符号在crontab里面被翻译成了命令结束,所以当crontab读到%就吧后面的内容截取掉了,导致脚本执行失败。 在%前面加上转移符号"\"即可,如下
 8 */2 * * * root /bin/mv /var/log/varnishd/access_log /var/log/varnishd/access_log.`/bin/date +"\%Y\%m\%d\%H"`00 && /usr/bin/killall -HUP varnishncsa


请大家以后在写crontab的执行脚本时一定要注意这个问题。


                                                              -----by andy chou

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有