我有下面的服务脚本,它调用 shell 脚本。我们在脚本中更改了一些内容当我直接运行 shell 脚本时,一切正常。当我重新启动服务器时,一切正常。如果我sudo service my-service stop
当时打电话sudo service my-service start
,它会停止,但永远不会再开始。它显示 systemctl OK,但是进程永远不会启动,并且 shell 脚本中不会写入任何日志。即使我打电话也sudo /etc/init.d/my-service
不会启动。再次提醒您,这将在服务器重新启动时自动正常启动。对可能出现的问题有什么想法,或者如何从失败的开始中获得更好的日志记录?
#!/bin/bash
#
# my-service
#
# chkconfig: 345 84 15
# description: Start up the My Service process.
# config: /etc/sysconfig/my-service
# processname: java
# Source function library.
. /etc/init.d/functions
# Loading the configuration parameters.
if [ -f /etc/sysconfig/my-service ]; then
source /etc/sysconfig/my-service
fi
RETVAL=0
case "$1" in
start)
if [ -f /opt/my-service/latest/bin/my-service-start.sh ];
then
logger -s "Starting My Service"
/bin/su -p -s /bin/sh myserviceuser /opt/my-service/latest/bin/my-service-start.sh
RETVAL=$?
[ $RETVAL = 0 ] && touch /var/lock/subsys/my-service
fi
;;
stop)
if [ -f /opt/my-service/latest/bin/my-service-stop.sh ];
then
logger -s "Stopping My Service"
/bin/su -p -s /bin/sh myserviceuser /opt/my-service/latest/bin/my-service-stop.sh
RETVAL=$?
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/my-service
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
答案1
“我们改变了剧本中的一些内容”
没有足够的信息来权威地回答这个问题,因为my-service-start.sh
和的内容my-service-stop.sh
是一个谜。
假设您所说的一切都是真的,那么情况是,一旦运行并且都已经运行my-service-start.sh
,则不会按预期运行。尽管它在第一次启动时运行良好。这意味着脚本运行后某些内容会发生更改。情况与启动脚本成功运行时不同。也许您的启动脚本需要的端口仍然被占用。my-service-start.sh
my-service-stop.sh
我建议研究一下 PID 文件处理,以阻止您的脚本潜在地自我踩踏,并分析您的开始/停止正在更改的内容的脚本。尝试在启动脚本中添加一些错误处理,看看是否可以帮助您隔离问题。