2013-07-15 63 views
2

這是我的.conf文件的一部分。如何連接Upstart中的兩個字符串環境/ w env節?

env SERVICE_ROOT="/data/service_root" 
env LOG_DIR="$SERVICE_ROOT/logs" 

,我檢查了所有的變量具有以下..

echo "\n`env`" >> /tmp/listener.log 2>&1 

我期待$ LOG_DIR是 「/數據/ service_root /日誌」,但我得到的是..

SERVICE_ROOT=/data/service_root 
LOG_DIR=$SERVICE_ROOT/logs 

我錯過了什麼嗎?

回答

3

作業配置文件本身不能訪問定義的環境變量。

新貴允許您設置環境變量,將是作業其工作的配置文件,只在定義訪問

8.2 Environment Variables解釋:

注意作業配置文件不能訪問用戶的環境變量,甚至不能訪問超級用戶。這是不可能的,因爲所有創建的作業進程都是沒有用戶環境的init子進程。

定義的變量$ SERVICE_ROOT可以被定義的作業訪問。在腳本塊出口

# /etc/init/test.conf 
env SERVICE_ROOT="/data/service_root" 

script 
    export LOG_DIR="$SERVICE_ROOT/logs" 
    # prints "LOG_DIR='/data/service_root/logs'" to system log 
    logger -t $0 "LOG_DIR='$LOG_DIR'" 
    exec /home/vagrant/test.sh >> /tmp/test.log 
end script 

變量$ LOG_DIR可以調用同一個塊中的進程。

#!/bin/bash -e 
# /home/vagrant/test.sh 
echo "running test.sh" 
echo "\n`env`" | grep 'LOG_DIR\|SERVICE_ROOT' 

運行後sudo start test內容/tmp/test.log的將是:

running test.sh 
SERVICE_ROOT=/data/service_root 
LOG_DIR=/data/service_root/logs 

在系統日誌,你會發現:

7月16日1時39分39秒的流浪漢,Ubuntu的-raring-64/proc/self/fd/9:LOG_DIR ='/ data/service_root/logs'