ServiioをDebianのサービスに切り替えて起動時に起動し、サービスコマンドラインユーティリティを介して制御できるようにします。
デーモンを実行する専用ユーザー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でスクリプトを手動で実行しても機能しません。
この問題を解決するにはどうすればよいですか?