2017-04-19 41 views
0

我面临在我的服务脚本中使用环境变量的问题。在服务脚本中使用环境变量

在我的服务脚本中,我使用了一个环境变量,即INSTALL_DIR,其值在不同系统上可能会有所不同。我必须从$ INSTALL_DIR获得安装目录,然后我必须启动该服务。当我运行服务脚本时,环境变量根本不是来源的。

是否可以从INSTALL_DIR环境变量获取安装目录。我可以想到的另一个选择是使用INSTALL_DIR环境变量动态创建服务脚本。

echo "INSTALL DIR: ${INSTALL_DIR}" 
name=`basename $0` 
pid_file="/var/run/$name.pid" 
get_pid() { 
    cat "$pid_file" 
} 

is_running() { 
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1 
} 

Start() 
{ 
    echo "Starting Application" 

    if is_running; then 
     echo "[`get_pid`] Already Started" 
    else 
     if [ -z "$user" ]; then 
      nohup $INSTALL_DIR/bin/application 2>&1 & 
     else 
      nohup sudo -u "$user" $cmd 1> $INSTALL_DIR/bin/application 2>&1 & 
     fi 
     echo $! > "$pid_file" 
     if ! is_running; then 
      echo "Unable to start, see logs" 
      exit 1 
     fi 
     echo "[`get_pid`] Started" 
    fi 
} 

我尝试使用运行应用程序下面的命令

service application start 

回答

1

在我服务的脚本...我得从$ INSTALL_DIR安装目录,然后我要启动该服务。

你的问题并不是关于shell脚本,而是关于你的系统的启动。不幸的是,这个过程因Linux发行版而异,并且往往记录不完整。

例如,人服务说,服务运行在可预测的环境中的系统V init脚本或暴发户工作成为可能,消除大部分环境变量,并设置/当前工作目录。,但人新贵说:

$ man -k upstart 
upstart: nothing appropriate. 

不仅如此,但服务手册页专门列出的环境变量的脚本将启动。不用说,你的不在其中。

参数化启动脚本的传统方法是将信息放入已知文件中(通常为/etc),并在脚本中引用该文件。在你的情况下,你可以这样做:

INSTALL_DIR=$(cat /etc/my-install-dir.cfg) 

然后进行相应的处理。

可能有办法强制启动以支持其他环境变量。但迟早,您需要的信息必须存储在文件系统的某个位置。在我看来,最简单的方法是预留一个文件名来保存该信息,并直接读取该文件。

0

使用此下面的代码在您的脚本。

if [[ -z "${INSTALL_DIR}" ]]; then 
    echo "INSTALL_DIR is undefined" 
else 
    INSTALL_DIR=<<your installation directory>> 
fi 
+0

如果我这样做,当我使用“服务应用程序启动”时,安装目录不是来源 –

+0

然后在〜/ .bash_rc或〜/ .profile文件中导出$ INSTALL_DIR值。 –