シェルスクリプトを呼び出す次のサービススクリプトがあります。スクリプトでいくつか変更しました。シェルスクリプトを直接実行すると、すべてがうまく機能します。サーバーを再起動すると、すべてがうまく機能します。sudo service my-service stop
thenを呼び出すと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.sh
my-service-stop.sh
スクリプトが潜在的に自分自身を踏むのを防ぐために、PIDファイルの処理を調べて分析することをお勧めします。スタートを止める変更される内容のスクリプトです。起動スクリプトにいくつかのエラー処理を追加し、これが問題を隔離するのに役立つことを確認してください。