読者です 読者をやめる 読者になる 読者になる

○○が停止していますが PID ファイルが残っています

ntpd のステータスを確認した際に、以下のようなメッセージが出力されました。

# service ntpd status

ntpdが停止していますがPIDファイルが残っています 

対処法をメモします。 OS は CentOS 6.6 です。

 普通に停止しているデーモンを起動すればOKなのですが.....

# service ntpd start

 デーモンが起動できなくなることもあるようなので、そのような場合は以下のように対処してみてください。

 

PID ファイルを消します。

# rm /var/run/ntpd.pid 

 もう一度ステータスを確認します。

# service ntpd status

ntpdは停止していますがサブシステムがロックされています 

 /var/lock/subsys/ 配下にある ntpd ファイルを消します。

# rm /var/lock/subsys/ntpd 

 もう一度ステータスを確認します。

# service ntpd status

ntpdは停止しています

これで起動できるようになります。 

 

今回 ntpd でなぜこのような現象が起きたのか、原因調査を行わなかったため分からないのですが、事象は再現できます。

 

ntpd を起動させます。

# service ntpd start

ps コマンドで PID を確認。

 # ps aux | grep ntpd
ntp 28186 0.1 0.2 30732 2056 ? Ss 10:15 0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
root 28191 0.0 0.0 107464 916 pts/1 S+ 10:15 0:00 grep ntpd

 プロセスを kill します。

 # kill 28186

 ステータスを確認します。

 # service ntpd status
ntpd が停止していますが PID ファイルが残っています

 

デーモンが起動されると /var/lock/subsys/ 配下に空のファイルが作成され、デーモンが停止すると削除されます。

# service ntpd start

# ll /var/lock/subsys/ntpd
-rw-r--r--. 1 root root 0 6月 21 11:22 2015 /var/lock/subsys/ntpd

#service ntpd stop

# ll /var/lock/subsys/ntpd
ls: cannot access /var/lock/subsys/ntpd: そのようなファイルやディレクトリはありません

これは init スクリプト内でも記述されています。

# less /etc/init.d/ntpd

prog=ntpd
lockfile=/var/lock/subsys/$prog

 

start() {
[ "$EUID" != "0" ] && exit 4
[ "$NETWORKING" = "no" ] && exit 1
[ -x /usr/sbin/ntpd ] || exit 5
[ -f /etc/sysconfig/ntpd ] || exit 6
. /etc/sysconfig/ntpd

# Start daemons.
echo -n $"Starting $prog: "
daemon $prog $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}

 

stop() {
[ "$EUID" != "0" ] && exit 4
echo -n $"Shutting down $prog: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $lockfile
return $RETVAL
}

またデーモンが起動されると /var/run/ 配下に PID ファイルが作成され、デーモンが停止されると削除されます。

# service ntpd start

# ll /var/run/ntpd.pid
-rw-r--r--. 1 root root 5 6月 21 11:31 2015 /var/run/ntpd.pid

# service ntpd stop
# ll /var/run/ntpd.pid
ls: cannot access /var/run/ntpd.pid: そのようなファイルやディレクトリはありません

(PID ファイルの中身は pid が記載されています)

 # service ntpd status
ntpd (pid 28818) を実行中...

# cat /var/run/ntpd.pid
28818

# ps aux | grep ntpd
ntp 28818 0.0 0.2 30732 2060 ? Ss 11:55 0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g

従って、デーモンが起動している際にプロセスが kill され、デーモンが正常に停止されると消えているはずのファイルが残っていたために、今回のようなメッセージが出力されたものと考えます。

 

経験として OOM Killer によってプロセスが kill された場合に同様の事象を確認しました。(そのときは slapd でした)