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에서 스크립트를 수동으로 실행해도 작동하지 않습니다.
이 문제를 해결하려면 어떻게 해야 합니까?