背景:我用一条命令获取每台机器的日志,命令如下:
[root@localhost scripts]# grep -13 `date -d yesterday +%d-%b-%Y` /var/log/php/php_errors.log > /tmp/$HOSTNAME-PhpErrorLog-`date -d yesterday +%Y%m%d`.log && grep -13 `date -d yesterday +%d-%b-%Y` /var/log/php/slow.log > /tmp/$HOSTNAME-slowlog-`date -d yesterday +%Y%m%d`.log && grep `date -d yesterday +%Y/%m/%d` /var/log/nginx/8082_web_error.log.1 > /tmp/$HOSTNAME-Api_Log-`date -d yesterday +%Y%m%d`.log && tar -czf /tmp/${HOSTNAME}_`date -d yesterday +%Y%m%d`.tar.gz /tmp/${HOSTNAME}-* && sz /tmp/${HOSTNAME}_`date -d yesterday +%Y%m%d`.tar.gz && rm /tmp/${HOSTNAME}*
但这个命令在一台机器上没有任何的反应,然后我就手动执行每一条命令,成功了
但合起来执行一直没输出
解决:
发现输出的php_errorlog文件是空的,、tmp文件夹也只生成了一个文件
猜想是第一条命令没有执行成功,导致后面命令没有执行
测试了下果然如此
测试是否grep匹配不到数据就返回非0
果然如此,
所以解决方案,将前面几个&&换成分号