停止している場合はサービスを再開できるよう作業中です。
私が探していたのはupstart
サービスを再開するために、私はいくつかの回答。
テストのためにサービスを受けましたapache2
。以下のようにコードを変更しました。
# File : /etc/init.d/apache2
...
...
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
# either "stop" or "graceful-stop"
local STOP=$1
# can't use pidofproc from LSB here
local AP_RET=0
# send stopping apache event
echo "Stopping....."
initctl emit stopping-apache2
if pidof $DAEMON > /dev/null 2>&1 ; then
if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
AP_RET=2
else
AP_RET=1
fi
else
AP_RET=0
fi
# AP_RET is:
# 0 if Apache (whichever) is not running
# 1 if Apache (whichever) is running
# 2 if Apache from the PIDFILE is running
if [ $AP_RET = 0 ] ; then
# send stopping apache event
echo "Stopped.....1"
initctl emit stopped-apache2
return 1
fi
if [ $AP_RET = 2 ] && apache_conftest ; then
$APACHE2CTL $STOP > /dev/null 2>&1
apache_wait_stop $?
# send stopping apache event
echo "Stopped.....2"
initctl emit stopped-apache2
return $?
else
if [ $AP_RET = 2 ]; then
clear_error_msg
APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
killproc -p $PIDFILE $DAEMON
apache_wait_stop $?
# send stopping apache event
echo "Stopped.....3"
initctl emit stopped-apache2
return $?
elif [ $AP_RET = 1 ] ; then
APACHE2_INIT_MESSAGE="There are processes named 'apache2' running which do not match your pid file which are left untouched in the name of safety, Please review the situation by hand".
# send stopping apache event
echo "Stopped.....4"
initctl emit stopped-apache2
return 2
fi
fi
}
...
...
注記: メッセージを送信するinitctl emit stopped-apache2
その後、apache2.conf
このイベントで開始操作を実行するように変更されました。
# File /etc/init/apache2.conf
# apache2
# the purpose of this job is
# * start apache2 in upstart rather than SysV startup
start on stopped-apache2
stop on runlevel [016]
pre-start script
export RUNLEVEL=2
[ -f /var/lib/apache2.enable ] && /etc/init.d/apache2 start
end script
post-stop exec /etc/init.d/apache2 stop
Apacheを停止するとメッセージが表示されました。
root@localhost:~# /etc/init.d/apache2 stop
[....] Stopping web server: apache2Stopping.....
Stopped.....2
. ok
しかし、実行されていないようですstart on stopped-apache2
。
また、 を使用してジョブを再起動しますinitctl restart apache2
。
何か見逃しましたか?
答え1
Upstartrespawn
機能を使用できます。次の場所にある Apache の upstart ジョブを使用します。https://bitbucket.org/CameronNemo/upstart-jobs/src/2090612200fa588412e3fe22aec5ba3747ae88d2/apache2.conf?at=master
という行を追加するだけですrespawn
。