0

我拼凑了以下脚本:

ssh -2 -l root devserver "cd /var/log/httpd; ls | grep -v 'gz' | xargs -- tail -n 15"

这会登录到 devserver,chagnes 目录到 httpd 日志,列出它们,删除数百个压缩的历史轮换,然后将其通过管道传输到 tail。

可以轻松查看正在发生的错误类型。这在我自己 ssh 时有效,然后在引号中执行命令。但是,当将其用作脚本时,生产的输出会出现乱码,并且我会注意到 dev 上的提示音,几乎就像它将输出视为命令而不是简单的文本一样。

我敢肯定有一些逃跑的东西或者我错过了一些东西。

注意: - 以 root 身份登录,因为通常的 ssh 用户无法读取 httpd 日志。- 因为当我不在相关目录中时,tail 无法找到从 grep 管道输入的文件。

4

2 回答 2

3

要查看使用了哪个解释器:

ssh risdevo0196 'echo $0'

如果 ksh :

tail -n 15 /var/log/httpd/!(*gz)

如果重击

shopt -s extglob; tail -n 15 /var/log/httpd/!(*gz)

但如果参数列表太长,必须使用 find :

find /var/log/httpd/ \! -name '*gz' -exec tail -n 15 {} +
于 2012-10-29T09:16:49.487 回答
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

由于您想轻松查看正在发生的错误类型,因此我有时会使用一种小方法:(警告:如果您的日志文件很大,这可能会矫枉过正,小心!!)

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
于 2012-10-29T09:03:21.797 回答