Bash

我應該把無主日誌文件放在哪裡

  • August 30, 2018

我有一個使用 sudo 進出的腳本。某些命令必須以 $USER 身份執行,某些命令必須以 root 身份執行。

目前,我正在後台執行一個循環以保持 sudo 處於活動狀態,因此您執行腳本,輸入一次密碼,腳本 sudo 它需要的命令(以普通使用者身份執行其餘命令),然後後台循環終止時腳本可以。該腳本僅在非常受控的環境中執行,我不擔心在此過程中 sudo 訪問保持打開狀態。

但是,我也試圖將這個腳本記錄在一個以後不會被清理的地方。以下是腳本的相關部分:

#!/bin/bash

logFile="path/to/log/file"

main () {
  # some getopts
}

getOptExample () {
  sudoFunction
  # do some other stuff that takes a really long time
  # and bounces back and forth between sudo and not sudo
  cleanUp
}

getOptOtherExample () {
  sudoFunction
  # do some other stuff that takes a really long time
  # and bounces back and forth between sudo and not sudo
  cleanUp
}

sudoFunction () {
   sudo -v
   while true;
   do
       sudo -n true
       sleep 60
       kill -0 "$$" || exit
   done 2>/dev/null &
}

cleanUp () {
   # remove script file
   # remove tmp dir that we're working in
   # reboot computer to apply all changes
}

(main "$@") 2>&1 | tee $logFile

我無法寫入 /var/log 因為腳本的最後一行發生在呼叫 sudo 函式之前,所以它只有執行使用者的權限。我也無法寫入我的 tmp 目錄,因為它變得雜亂無章,我需要在腳本完成後刪除其中的文件。此外,在腳本自動化的工作完成後,該目錄沒有理由留下來。

  • 我確實有一個具有未受影響的主目錄的帳戶,但使用者無權在該主目錄中創建文件。
  • 這個腳本在 mac OS 上執行,但是,我試圖保持它與其他/未來/非 mac 的東西兼容(堅持 bash,試圖堅持 posix,地獄,甚至試圖堅持 Linus 的指導方針用於添加到 Linux 核心)。
  • 我需要日誌文件在至少一次重啟後持續存在

我應該在哪裡轉儲此腳本的日誌文件:

  • 容易找到(直覺)
  • 使用者可寫,無需 sudo
  • 不寫入使用者的主目錄
  • 重啟時不會被刪除

或者我有更好的方法來做到這一點(如有必要,我可以發布整個巨大的腳本)?

使用基本文件權限或 ACL 來完成。

有例如group權限部分,以及呼叫newgrp切換主要組的命令。還要考慮SGID使案例如nobody作為所有者的位。

不確定,如果 ACL 在 OSX 上可用,但我希望它在那裡。只需用於setfacl允許user|group訪問和寫入日誌文件。

通常/var/log/應該用於日誌文件。例如設置一個/var/log/yourscripname具有適當權限的文件夾。

引用自:https://unix.stackexchange.com/questions/465654