Bashrc
Upstart - 載入 bashrc 變數
我想知道如何
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.bashrc
and~/.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