在我的应用程序运行之前,我需要启动 3 个服务(postgresql、redis、elasticsearch)。我的问题是,我可以将 3 合并到一个文件/脚本中,所以每次我想运行这些服务时,我都会点击/etc/init.d/services start
,如果我完成了,我只会做一个/etc/init.d/services stop
而不是手动停止其中 3 个?
问问题
1091 次
2 回答
1
是的,当然,您必须在 /etc/init.d 中为此编写自己的脚本您将不得不处理这样的事情:
#!/bin/sh
# service name
SERVICE_NAME=Liferay
# directory where are stored service bin
SERVICE_DIRECTORY=/opt/Portal/bin
# startup service script
SERVICE_STARTUP_SCRIPT=startup.sh
# stop service script
SERVICE_SHUTDOWN_SCRIPT=shutdown.sh
usage()
{
echo "-----------------------"
echo "Usage: $0 (stop|start|restart)"
echo "-----------------------"
}
if [ -z $1 ]; then
usage
fi
service_start()
{
echo "Starting service '${SERVICE_NAME}'..."
OWD=`pwd`
cd ${SERVICE_DIRECTORY} && ./${SERVICE_STARTUP_SCRIPT}
cd $OWD
echo "Service '${SERVICE_NAME}' started successfully"
}
service_stop()
{
echo "Stopping service '${SERVICE_NAME}'..."
OWD=`pwd`
cd ${SERVICE_DIRECTORY} && ./${SERVICE_SHUTDOWN_SCRIPT}
cd $OWD
echo "Service '${SERVICE_NAME}' stopped"
}
case $1 in
stop)
service_stop
;;
start)
service_start
;;
restart)
service_stop
service_start
;;
*)
usage
esac
exit 0
只需在 start() stop() restart() 中添加您的其他服务
于 2013-11-21T00:58:18.577 回答
0
即使它是有效的,我认为这不是这样做的正确方法。设置 initd 以便您可以为启动和停止服务的顺序设置不同的优先级。
如果您查看chkconfig手册,您可以看到启动和停止值的优先级含义是什么。这将确保您的服务将按所需的顺序启动。唯一没有考虑的是,当服务启动失败时,对于这种情况,没有通知其他服务。在这种情况下,您可以添加代码来轮询 initd 脚本上的状态以查询服务的状态,或者只是让您的服务稍后抱怨。
于 2014-12-09T20:08:05.137 回答