Systemd Service

47 views
Skip to first unread message

Sascha Heimann

unread,
Nov 4, 2021, 7:08:12 AM11/4/21
to PicApport
Hallo,

ich habe in der Doku die Anleitung für einen Dienst unter /etc/init.d gelesen und befolgt und kann picapport auch mit dem Befehl /etc/init.d/picapport start starten.

Jedoch würde ich gerne picapport als systemd Dienst laufen lassen. Ich weiß, dass ich dazu nur ein Servicefile unter /etc/systemd/ssystem erstellen muss. Aber wenn ich da das picapport Startscript hinterlege, startet der dienst zwar, aber ich kann ihn nicht stoppen oder neu starten.

Hat da vil. jemand Erfahrung...??

gruss
Sascha

Thomas König

unread,
Nov 14, 2021, 5:14:29 AM11/14/21
to PicApport
Hi,

bei mir funktioniert der unten gezeigte Ansatz. Nachdem die beiden files an die richtige Stelle kopiert wurden, braucht es noch ein systemctl daemon-reload und es sollte funktionieren. Ich bin aber kein Experte für systemd, weiß also nicht, ob das ein sinnvoller Ansatz ist. Ich würde außerdem gerne den Service als user laufen lassen, aber es gelingt mir noch nicht, das Startscript von picapport als non-root user laufen zu lassen.

Grüße
Thomas


/etc/systemd/system/picapport.service

[Unit]
Description=Run picapport server as user picapport
DefaultDependencies=no
After=network.target

[Service]
Type=simple
#User=picapport
#Group=picapport
ExecStart=/opt/picapport/picapport start
ExecStop=/opt/picapport/picapport stop
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target


/opt/picapport/picapport

#!/bin/bash
# Filename : picapport
# Version : 2.0
# Date : 20.09.2016
# Copyright : (c) 2016 Contecon Software GmbH
# Description : starting script for starting PicApport as a daemon
# History : 20.08.2015 - Initial version
# 20.09.2016 - revised

### BEGIN INIT INFO
# Provides: picapport
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2
# Default-Stop: 1
# Short-Description: PicApport Server
### END INIT INFO

PATH=/usr/bin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=picapport
DESC="PicApport Daemon"
DAEMON_ARGS="-d -m -S $NAME bash /opt/picapport/StartPicApport.sh"

case "$1" in
start)

start-stop-daemon --test --start --pidfile "/var/run/$NAME.pid" --exec /usr/bin/screen -- $DAEMON_ARGS
if [ $? -eq 0 ]; then
echo -n "Starting $DESC: "
start-stop-daemon --start --pidfile "/var/run/$NAME.pid" --exec /usr/bin/screen -- $DAEMON_ARGS
PID=$( ps -aux | grep 'StartPicApport.sh' | grep --ignore-case 'screen' | awk '{print $2}' | head -1)
echo $PID > /var/run/$NAME.pid
echo "Daemon $NAME started. To access console type: screen -R $PID.picapport"
else
echo -n "Daemon $NAME already running. To access console type: screen -R "
cat /var/run/$NAME.pid | awk '{print $1".picapport"}'
fi
;;

stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop −−retry=SIGTERM/30/KILL/10 --pidfile "/var/run/$NAME.pid" --exec /usr/bin/screen -- $DAEMON_ARGS
if [ $? -eq 0 ]; then
echo "Daemon $NAME stopped."
else
echo "Daemon $NAME was not started."
fi
[ -e /var/run/$NAME.pid ] && rm /var/run/$NAME.pid
;;


status)
start-stop-daemon --status --pidfile "/var/run/$NAME.pid" --exec /usr/bin/screen -- $DAEMON_ARGS
if [ $? -eq 0 ]; then
echo -n "Daemon $NAME is running. To access console type: screen -R "
cat /var/run/$NAME.pid | awk '{print $1".picapport"}'
else
echo "Daemon $NAME was not started."
fi
;;

*)
echo "usage: /etc/init.d/picapport start|stop|status"
;;

esac
exit 0

Thomas König

unread,
Nov 14, 2021, 5:17:08 AM11/14/21
to PicApport
Siehe auch diese Antwort: https://groups.google.com/g/picapport/c/67L2_-7P91I/m/Vnj_NVVdBQAJ

sascha....@gmail.com schrieb am Donnerstag, 4. November 2021 um 12:08:12 UTC+1:
Reply all
Reply to author
Forward
0 new messages