저는 monit을 볼트, nginx, mongodb와 같은 프로세스를 모니터링하는 도커 컨테이너에서 실행하고 있습니다. 나는 프로세스가 충돌과 좀비가된다가, MONIT는 PID 파일을 삭제하고 프로세스를 다시 시작하지 않습니다 어떤 이유로Monit이 pid 파일을 지우지 않고 프로세스가 좀비가 될 때 프로세스를 다시 시작하지 않습니다.
#!/bin/sh
# vault service script
VAULT_DIR="/tmp/vault"
VAULT_USER="myuser"
USER=$(whoami)
if [ $USER != "root" ]
then
echo "Only root can run vault-server service"
exit 1
fi
usage() {
echo "Usage: `basename $0`: <start|stop|status|restart>"
exit 1
}
start() {
status
if [ $PID -gt 0 ]
then
echo "vault server daemon was already started. PID: $PID"
return $PID
fi
echo "Starting vault server daemon..."
rm -f /var/run/vault.pid
VAULT_OPTIONS=""
VAULT_OPTIONS="-dev"
su $VAULT_USER -c "/usr/bin/nohup vault server $VAULT_OPTIONS 1>/var/log/vault/vault.log 2>/var/log/vault/vault.err &"
status
if [ $PID -gt 0 ]
then
echo $PID >> /var/run/vault.pid
fi
sleep 5
su $VAULT_USER /opt/vault/setup-vault.sh
}
stop() {
status
if [ $PID -eq 0 ]
then
echo "vault server daemon is already not running"
return 0
fi
echo "Stopping vault server daemon..."
rm -f /var/run/vault.pid
kill $PID
}
status() {
PID=`ps -ef | grep "vault server" | grep -v grep | grep -v "\[" | awk '{print $1}'`
if [ "x$PID" = "x" ]
then
PID=0
fi
# if PID is greater than 0 then vault server is running, else it is not
return $PID
}
if [ "x$1" = "xstart" ]
then
start
exit 0
fi
if [ "x$1" = "xstop" ]
then
stop
exit 0
fi
if [ "x$1" = "xrestart" ]
then
stop
start
exit 0
fi
if [ "x$1" = "xstatus" ]
then
status
if [ $PID -gt 0 ]
then
echo "vault server daemon is running with PID: $PID"
else
echo "vault server daemon is NOT running"
fi
exit $PID
fi
usage
에 공급 시작 정지 기능, 각 프로세스에 대한 래퍼 스크립트를 만들었습니다. 또한 상태 확인 기능에서 좀비 프로세스를 확인하고 catch하지 않으려면 ps -ef
문에 grep -v "\["
절을 추가했습니다. 제가해야 할 일이 있습니까? 아니면 이전에이 문제에 직면 한 사람이 있습니까?
관련성 여부는 확실하지 않습니다. 하지만 내 Windows 환경에서'mongod.exe'에 문제가 생겨서 좀비가 되려고합니다. 특정 상태에 이르면 프로세스를 처리하는 것이 거의 불가능하다는 것을 알게되었습니다. //이 질문에 관해서는, 아마도 프로세스가 아닌 monit의 문제 일 수 있습니까? – KDecker