Bash
我應該把無主日誌文件放在哪裡
我有一個使用 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
具有適當權限的文件夾。