Bashrc

Upstart - 載入 bashrc 變數

  • August 13, 2014

我想知道如何bashrc在新貴腳本中載入變數並執行(node.js在這種情況下是伺服器)。

最好的方法是什麼?

我試過這個:

exec sudo -u someuser $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

還有這個

exec start-stop-daemon --start -c someuser --exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

但在第一個選項中,節點應用程序無法讀取http_proxy變數(在 中定義/etc/bash.bashrc)。在第二個中它無法讀取配置文件(節點應用程序安裝在/opt文件夾中)

您可以通過誘使它認為它被呼叫來強制bash讀取/etc/bash.bashrcand ~/.bashrc(沒有 using 的其他副作用) :bash -i``ssh

sudo -Hu someuser env SSH_CLIENT=1 SHLVL=0 \
 "NODE_PATH=$NODE_PATH" "FULL_PATH=$FULL_PATH" \
 "FILE_NAME=$FILE_NAME" "PROGRAM_NAME=$PROGRAM_NAME" bash -c '
 "$NODE_PATH" "$FULL_PATH/$FILE_NAME" >> "/var/log/$PROGRAM_NAME.sys.log" 2>&1'

sudo通常會重置環境,因此您需要以這種方式通過它們。您想要-H(或者-i雖然-i會導致讀取配置文件)這樣HOME設置(~/.bashrc至少用於位置)。

/etc/bash.bashrc由互動式 shell 在啟動時讀取。是設置互動使用的地方,比如補全設置、提示等,不要在那裡設置環境變數。請參閱是否有所有 shell 讀取的“.bashrc”等效文件?系統範圍的環境變數的好地方是/etc/environment/etc/profile(以及 中的文件/etc/profile.d)。

設置環境變數的正常Upstart 方法是在作業文件本身中。Upstart 不讀取/etc/environment,但您可以從作業腳本中的文件載入環境變數:

script
. /etc/environment
exec start-stop-daemon …
end script

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