我在服务脚本中使用环境变量时遇到问题。
在我的服务脚本中,我使用了一个环境变量,即 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
在我的服务脚本中......我必须从 $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)
然后相应地进行。
可能有一些方法可以强制您的初创公司支持其他环境变量。但是,迟早,您需要的信息必须存储在文件系统的某处。在我看来,最简单的方法是保留一个文件名来保存该信息,然后直接读取该文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句