Linux

如何完全記錄所有 bash 腳本操作?

  • July 29, 2020

從我的腳本輸出中,我想擷取所有帶有錯誤消息的日誌數據並將它們全部重定向到日誌文件。

我有如下腳本:

#!/bin/bash
(
echo " `date` : part 1 - start "
ssh -f admin@server.com 'bash /www/htdocs/server.com/scripts/part1.sh logout exit'
echo " `date` : sleep 120"
sleep 120
echo " `date` : part 2 - start"
ssh admin@server.com 'bash /www/htdocs/server.com/scripts/part2.sh logout exit'
echo " `date` : part 3 - start"
ssh admin@server.com 'bash /www/htdocs/server.com/scripts/part3.sh logout exit'
echo " `date` : END"
) | tee -a /home/scripts/cron/logs

我想查看文件中的所有操作/home/scripts/cron/logs

但我只看到我在echo命令之後放置的內容。

如何在日誌中檢查該SSH命令是否成功?

我需要收集所有日誌。我需要它來監視腳本中每個命令的結果,以便更好地分析腳本失敗時發生的情況。

我通常在每個腳本的開頭放置類似於以下內容的內容(特別是如果它將作為守護程序執行):

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':

解釋:

  1. exec 3>&1 4>&2

保存文件描述符,以便它們可以恢復到重定向之前的任何內容,或者使用它們自己輸出到以下重定向之前的任何內容。 2. trap 'exec 2>&4 1>&3' 0 1 2 3

恢復特定信號的文件描述符。通常不需要,因為它們應該在子 shell 退出時恢復。 3. exec 1>log.out 2>&1

重定向stdout到文件,log.out然後重定向stderrstdout. 請注意,當您希望它們轉到同一個文件時,順序很重要。stdout 必須在被重定向到之前stderr被重定向stdout

從那時起,要在控制台上查看輸出(也許),您可以簡單地重定向到&3. 例如,

echo "$(date) : part 1 - start" >&3

在執行上面的第 3 行之前,將轉到指定的任何地方stdout,大概是控制台。

引用自:https://serverfault.com/questions/103501