2017-05-22 58 views
0

我正在尝试使用Bash脚本来执行某些日志条目并通过swatch使用swatch生成更加用户友好的通知电子邮件。但是,我发现当swatch拾取相应的日志文件行以匹配特定的应用程序时,Bash脚本与sh: script: No such file or directory错误。Bash脚本失败 - 捡起假正面脚本调用

这似乎是由于问题的输出类似的日志行: [2017-05-22 20:00:41] somehost someapp[3999]: INFO: <script>: bad stuff happened bruh

我测试过的脚本出从东西像rsyslog现在输出到/ var/log/messages文件和安全,这不要不会造成问题。我试图使这些通知的具体应用程序只是有问题,因为日志行本身包括<script>,我不能排除。具体来说,这似乎只与<script绊倒,因为我已经搞砸了删除可能被解释为除了文本之外的东西的日志行中的字符。

有关如何不让Bash脚本尝试将<script>解释为原始日志中的文件/目录的任何想法?如果建议的答案是简单地将这个问题简单化,那就更好了。我试过使用sed -i 's/\<script\>//g ${@}删除<script>以去除和存储到一个临时变量,目的是做类似于:echo -e "${plainenglish}\n\nThe original log message is:${logline}" >> $outputfile但我得到了上述相同的错误。

编辑:更多信息。有问题的应用程序是Kamailio,其中大部分来自路由执行的记录都是由xlog模块写入的。默认情况下,xlog会在您登录的所有内容前面推送<script>。该模块确实包含用于前缀的参数覆盖(modparam),默认为<script>

+0

你可以发布一个你正在使用的Bash脚本的最小例子吗? –

+0

这不会发生。也许你正在调用'eval','sh','ssh','su'或类似的东西。此外,仔细检查,因为您的错误信息,似乎您使用的是说你在使用''bash' sh' –

+0

我这里还有一些片段: 从样本的配置: 'watchfor /假装这是正则表达式/ EXEC “bash /path/to/somescript.sh $ _”' From Bash script: ' #!/ bin/bash#< - - 这个bash表明这是/ bin/bash而不是/ bin/sh HOST = $(echo -e $ @ | cut -d“”-f 3) MSG =“This请参阅下面的冒犯日志:“ echo -e”\ n \ n $ {@}“>> $ MSG ' – Ruhrohshingo

回答

0

我意识到这是一个有点特殊的问题和解决办法,但这里有一个总结,然后建议:

- 使用Kamailio(SIP服务器/代理等)与Xlog软件配置日志调用一些日志文件(例如, :/ var/log/kamailio)

- 使用swatch或某些工具来抓取特定的Kamailio日志以便通知,例如路由失败或收到的可疑请求(例如:[email protected]:5060)

- 使用Bash shell脚本以某种方式清理/标准化相应的日志行以进行分派。

解决方案:将xlog的前缀modparam设置为在尝试处理日志行时不会被Bash解释为合法命令(脚本是合法命令)的内容。

看来Bash处理会在默认的xlog生成的日志文件行中碰到<script>行时被引入歧途。