데비안에서 Java 프로세스를 악마화하는 문제

데비안에서 Java 프로세스를 악마화하는 문제

Serviio를 데비안의 서비스로 전환하여 부팅 시 시작하고 서비스 명령줄 유틸리티를 통해 제어할 수 있도록 하려고 합니다.

데몬을 실행하는 전용 사용자 serviio가 있습니다. 일시적으로 해당 사용자에게 셸을 제공하고 로그인하여 해당 사용자로 데몬을 시작하고 작동 중인지 확인했으므로 이는 관련 문제가 아닙니다.

이것은 내가 사용하고 있는 스크립트이며 /etc/init.d/serviio에 있습니다. 이 스크립트는 serviio 포럼에서 가져온 것이며 최근 이번 달까지 수년 동안 모든 사람들이 이 스크립트를 사용하여 성공했다고 보고했습니다.

#!/bin/bash
#
#########################################################
#- Daemon script for Serviio media server
#- By Ian Laird; converted for Debian by Jacob Lundbergand edited by Jopie
#- /etc/init.d/serviio
#########################################################
#
### BEGIN INIT INFO
# Provides:          serviio
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop serviio media server
# Description:       The Serviio media server makes your media available to
#                    all kinds of networked devices.
### END INIT INFO


. /lib/lsb/init-functions

if [ -f /etc/default/serviio ]; then
        . /etc/default/serviio
fi


DAEMON_STOP=" -stop"
NAME="$(basename $0)"
PIDFILE="/tmp/serviiod.pid"
TIMEOUT=10

if [ -f /etc/default/serviio ]; then
        . /etc/default/serviio
fi

[ -x "$DAEMON" ] || exit 0


running() {
        if [ "x$1" == "x" ]; then
                echo 0
                return 1
        fi

        PS=$(ps h -p $(echo $1 | sed -r 's/[\t \n]+/ -p /') | wc -l)
        echo $PS

        if [ $PS -gt 0 ]; then
                return 0
        else
                return 1
        fi
}


start() {
        log_daemon_msg "Starting Serviio media server daemon" "$NAME"
        start-stop-daemon --start -q -b -p "$PIDFILE" -m -c "${SERVICE_ACCOUNT}" -x "${DAEMON}" start
        log_end_msg $?
}

stop() {
        log_daemon_msg "Stopping Serviio media server daemon" "$NAME"
        if [ -r "$PIDFILE" ]; then
                PIDS=$(pstree -p $(<"$PIDFILE") | awk -F'[\(\)]' '/^[A-Za-z0-9]/ { print $2" "$4; }')
                if running "$PIDS" > /dev/null; then
                        "${DAEMON}" "${DAEMON_STOP}"
                        for PID in $PIDS; do
                                if running $PID > /dev/null; then
                                        kill -TERM $PID
                                fi
                        done
                fi
                COUNTDOWN=$TIMEOUT
                while let COUNTDOWN--; do
                        if ! running "$PIDS" > /dev/null; then
                                break
                        fi
                        if [ $COUNTDOWN -eq 0 ]; then
                                for PID in $PIDS; do
                                        if running $PID > /dev/null; then
                                                kill -KILL $PID
                                        fi
                                done
                        else
                                echo -n .
                                sleep 1
                        fi
                done
        fi

        if running "$PIDS" > /dev/null; then
                log_end_msg 1
        else
                rm -f "$PIDFILE"
                log_end_msg $?
        fi
}

status() {
        echo -n "$NAME should be"
        if [ -r "$PIDFILE" ]; then
                echo -n " up with primary PID $(<"$PIDFILE")"
                PIDS=$(pstree -p $(<"$PIDFILE") | awk -F'[\(\)]' '/^[A-Za-z0-9]/ { print $2" "$4; }')
                RUNNING=$(running "$PIDS")
                if [[ $RUNNING && $RUNNING -gt 0 ]]; then
                        echo -n " and $RUNNING processes are running."
                else
                        echo -n " but it is not running."
                fi
        else
                echo -n " stopped."
        fi
        echo
}


case "${1:-}" in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        status)
                status
        ;;
        *)
                log_success_msg "Usage: /etc/init.d/$NAME {start|stop|restart|status}"
                exit 1
        ;;
esac

exit 0

나는 또한 /etc/default/serviio에 있습니다

NAME="Serviio Media Server"
DAEMON="/opt/Serviio/bin/serviio.sh"    ## Update this to point at serviio_root/bin/serviio.sh
SERVICE_ACCOUNT="serviio" ## DON'T RUN UNDER ROOT!

적절한 서비스 명령을 사용하여 시스템에 서비스를 추가했습니다.

그러나 서비스를 시작하려고 할 때마다... systemd는 성공적으로 시작되었다고 보고하지만 데몬은 실제로 실행되고 있지 않습니다. 오류 메시지가 보고되지 않습니다.

/etc/init.d/serviio start에서 스크립트를 수동으로 실행해도 작동하지 않습니다.

이 문제를 해결하려면 어떻게 해야 합니까?

관련 정보