RedHat init.d 脚本在服务停止后不会启动

RedHat init.d 脚本在服务停止后不会启动

我有下面的服务脚本,它调用 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.shmy-service-stop.sh

我建议研究一下 PID 文件处理,以阻止您的脚本潜在地自我踩踏,并分析您的开始/停止正在更改的内容的脚本。尝试在启动脚本中添加一些错误处理,看看是否可以帮助您隔离问题。

相关内容