我拼凑了以下脚本:
ssh -2 -l root devserver "cd /var/log/httpd; ls | grep -v 'gz' | xargs -- tail -n 15"
这将登录到devserver,chagnes目录到httpd日志,列出它们,删除数百个压缩历史轮换,然后将其输入到尾部。
可以轻松查看正在发生的错误类型。当我自己ssh,然后用引号执行命令时,这个工作。但是,当使用它作为脚本时,生产中的输出会出现乱码,我会注意到dev上的chimes,就像它将输出视为命令而不是简单文本一样。
我确信有一些逃脱或某些我不知道。
注意: - 以root身份进行SSH访问,因为通常的ssh用户无法读取httpd日志。 - 因为当我不在相关目录中时,tail无法找到从grep传入的文件。
答案 0 :(得分:3)
要查看使用的解释器:
ssh risdevo0196 'echo $0'
如果是ksh:
tail -n 15 /var/log/httpd/!(*gz)
如果是bash
shopt -s extglob; tail -n 15 /var/log/httpd/!(*gz)
但如果参数列表太长,则必须使用find:
find /var/log/httpd/ \! -name '*gz' -exec tail -n 15 {} +
答案 1 :(得分:1)
为了您的目标,我认为find
会比解决方法ls
更好更简单:
ssh -2 -l root devserver 'find /var/log/httpd/ -type f ! -name "*.gz" -print0 | xargs -0 tail -n 15'
或
echo '
find /var/log/httpd/ -type f ! -name "*.gz" -print0 |
xargs -0 tail -n 15
' | ssh -2 -l root devserver
当你希望能够轻松查看正在发生的错误时,我有时会使用一些方法:( Warnind:如果你的话,这可能是 overkill logfiles很大,小心!!)
echo '
find /var/log/httpd/ -type f ! -name "*.gz" -print0 |
xargs -0 cat |
sed -ne 's/^.\{20\}[^:]*://p' |
sort |
uniq -c |
sort -n |
tail -n 30
' | ssh -2 -l root devserver