init.d 스크립트는 pid 파일을 생성하지 않습니다.

init.d 스크립트는 pid 파일을 생성하지 않습니다.

저는 우분투 16.04를 사용하고 있으며 monit을 사용하여 gunicorn을 모니터링하고 싶지만 두 가지 문제에 직면하고 있습니다.

  1. init.d 스크립트가 pid 파일을 지정하는 것으로 나타나더라도 pid 파일은 생성되지 않습니다.

  2. 항상 새로운 프로세스를 생성하는 gunicorn과 같은 것을 어떻게 모니터링합니까? 저는 하나의 서버에서 여러 django 사이트를 실행하고 있으며 각 사이트가 얼마나 많은 리소스를 사용하고 있는지 알고 싶습니다.

init.d 스크립트는 다음과 같습니다.

#!/bin/sh
### BEGIN INIT INFO
# Provides:     gunicorn
# Required-Start:   $all
# Required-Stop:    $all
# Should-Start:     $local_fs
# Should-Stop:      $local_fs
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

NAME=gunicorn
DESC="Gunicorn workers for site"

HELPER=/usr/sbin/gunicorn-debian
PID_DIR=/var/run/gunicorn
LOG_DIR=/var/log/gunicorn
CONF_DIR=/etc/gunicorn.d

test -x $HELPER || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/lsb/init-functions

Action() {
    mkdir -p $PID_DIR
    mkdir -p $LOG_DIR
    chmod 750 $LOG_DIR
    chown user:user $LOG_DIR

    log_daemon_msg "$1"
    shift

    if $HELPER \
        --conf-dir=$CONF_DIR \
        --pid-dir=$PID_DIR \
        --log-dir=$LOG_DIR \
        "$@"
    then
        log_success_msg
    else
        log_failure_msg
        exit 1
    fi
}

action="$1"
shift

case "$action" in
  start)
    Action "Starting $DESC" start "$@"
    ;;
  stop)
    Action "Stopping $DESC" stop "$@"
    ;;
  reload)
    Action "Reloading $DESC" reload "$@"
    ;;
  restart|force-reload)
    $0 stop "$@"
    $0 start "$@"
    ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload} [configs]" >&2
    exit 1
    ;;
esac

exit 0

답변1

이 목적으로 감독자를 사용할 수 있습니다. Gunicorn이 실제로 추천합니다. 바라보다http://docs.gunicorn.org/en/stable/deploy.html#supervisor

내 VPS에서 여러 Django 사이트를 실행하고 Supervisord를 사용하여 관리합니다. 다음은 구성 예입니다.

[program:blog]
command = /var/www/blog/django-gunicorn.sh
autostart = true

[program:extra]
command = /var/www/extra/django-gunicorn.sh
autostart = true

관련 정보