我在服务脚本中使用环境变量时遇到问题。
在我的服务脚本中,我使用的是环境变量,即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
答案 0 :(得分:1)
在我的服务脚本中...我必须从$ INSTALL_DIR获取安装目录,然后我必须启动该服务。
您的问题不是关于shell脚本,而是关于系统的启动问题。不幸的是,这个过程因Linux发行版而异,并且往往记录不佳。
例如, man service 表示, service在尽可能可预测的环境中运行System V init脚本或upstart作业,删除大多数环境变量并将当前工作目录设置为/.,但男子暴发户说:
$ man -k upstart
upstart: nothing appropriate.
不仅如此,服务联机帮助页专门列出了脚本将以其开头的环境变量。毋庸置疑,你的不在其中。
参数化启动脚本的传统方法是将信息放在已知文件中,通常在/etc
中,并在脚本中引用该文件。在您的情况下,您可以执行以下操作:
INSTALL_DIR=$(cat /etc/my-install-dir.cfg)
然后继续进行。
可能有办法强制您的启动以支持其他环境变量。但是,迟早,您需要的信息必须存储在文件系统的某个地方。在我看来,最简单的方法是保留一个文件名来保存该信息,并直接读取该文件。
答案 1 :(得分:0)
在脚本中使用以下代码。
if [[ -z "${INSTALL_DIR}" ]]; then
echo "INSTALL_DIR is undefined"
else
INSTALL_DIR=<<your installation directory>>
fi