2017-05-22 85 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>行時被引入歧途。