サービスが停止した後、RedHat init.dスクリプトは開始されません。

サービスが停止した後、RedHat init.dスクリプトは開始されません。

シェルスクリプトを呼び出す次のサービススクリプトがあります。スクリプトでいくつか変更しました。シェルスクリプトを直接実行すると、すべてがうまく機能します。サーバーを再起動すると、すべてがうまく機能します。sudo service my-service stopthenを呼び出すとsudo service my-service start停止しますが、再び起動しません。 systemctl OKが表示されますが、プロセスは開始されず、シェルスクリプトにログは記録されません。電話をかけても起動しません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ファイルの処理を調べて分析することをお勧めします。スタートを止める変更される内容のスクリプトです。起動スクリプトにいくつかのエラー処理を追加し、これが問題を隔離するのに役立つことを確認してください。

おすすめ記事