Wie erstelle ich einen benutzerdefinierten Dienst, der beim Booten unter Archlinux automatisch gestartet wird?

10

Ich möchte beim Start unter Archlinux (systemd) einen einfachen Befehl ausführen:

nohup fatrat -n &

Ich habe diese Arbeit an Debian:

#! /bin/sh
# /etc/init.d/fatratWS

### BEGIN INIT INFO
# Provides: fatratWS
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: fatratWS init script.
# Description: Starts and stops fatrat Web Server services.
### END INIT INFO

#VAR
FATRAT_PID=$(ps aux | awk '/fatrat --nogui/ && !/awk/ && !/nohup/ {print $2}')

# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting script fatratWS"
if [ -z "$FATRAT_PID" ]; then
nohup fatrat --nogui &
echo "Started"
else
echo "fatratWS already started"
fi
;;
stop)
echo "Stopping script fatratWS"
if [ ! -z "$FATRAT_PID" ]; then
kill $FATRAT_PID
fi
echo "OK"
;;
status)
if [ ! -z "$FATRAT_PID" ]; then
echo "The fatratWS is running with PID = "$FATRAT_PID
else
echo "No process found for fatratWS"
fi
;;
*)
echo "Usage: /etc/init.d/fatratWS {start|stop|status}"
exit 1
;;
esac

exit 0

Wie kann ich dasselbe auf Arch erreichen?

Ich habe es versucht:

[Unit]
Description=Fatrat NoGui Web Access Service

[Service]
ExecStart=/usr/bin/nohup /usr/bin/fatrat -n &
Type=forking

[Install]
WantedBy=multi-user.target

Beim manuellen Starten kann es jedoch nicht gestartet werden (Timeout)

Joudicek Jouda
quelle

Antworten:

14

Versuche dies:

[Unit]
Description=Fatrat NoGui Web Access Service
Requires=network.target
After=network.target

[Service]
ExecStart=/usr/bin/fatrat -n
Type=forking

[Install]
WantedBy=multi-user.target
  • Ich nahm an, dass ein "Web Access Service" ein Netzwerk benötigt, und fügte daher als Anforderung network.target hinzu.

  • Die Verwendung von nohup ist nicht erforderlich, da diese Funktionalität von systemd selbst bereitgestellt wird, ebenso wie das '&'.

  • Da wir nohup nicht mehr verwenden, würde sich der Typ in einfach ändern. Die in der Git-Version verfügbare Weboberfläche funktioniert jedoch nur, wenn wir sie gabeln.

  • Weitere Informationen zu systemd-Servicedateien finden Sie in der Manpage "systemd.service" und unter https://wiki.archlinux.org/index.php/Systemd#Writing_custom_.service_files

  • Sie können Restart=alwaysden [Service]Abschnitt ergänzen , um ihn bei einem Absturz automatisch neu zu starten.

  • Legen Sie die Servicedatei auf /etc/systemd/system/fatrat.serviceund aktivieren Sie sie für den automatischen Start übersystemctl enable fatrat.service

FSMaxB
quelle
Danke, es funktioniert! Der einzige Unterschied, den ich machen musste, war das Hinzufügen User=my_user_nameunter [Service]Abschnitt, um die Anwendung als mein Benutzer auszuführen. Auf diese Weise kann die Anwendung ihre Konfigurationsdateien von/home/my_user_name/.local/share/fatrat/data
Joudicek Jouda