Come creare un servizio personalizzato che si avvierà automaticamente all'avvio su Archlinux?


10

Vorrei eseguire un semplice comando all'avvio su Archlinux (systemd):

nohup fatrat -n &

Ho questo lavoro su 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

Come posso ottenere lo stesso su Arch?

Ho provato:

[Unit]
Description=Fatrat NoGui Web Access Service

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

[Install]
WantedBy=multi-user.target

Ma non si avvia all'avvio manuale (timeout)

Risposte:


14

Prova questo:

[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
  • Ho ipotizzato che un "Servizio di accesso al Web" abbia bisogno della rete, quindi ho aggiunto network.target come requisito.

  • L'uso di nohup non è necessario perché questa funzionalità è fornita da systemd stesso, lo stesso per '&'.

  • Dato che non usiamo più nohup, il tipo cambierebbe in semplice, tuttavia l'interfaccia web disponibile sulla versione git non funzionerà se non lo facciamo in fork.

  • Per ulteriori informazioni sui file di servizio systemd, consultare la pagina man "systemd.service" e https://wiki.archlinux.org/index.php/Systemd#Writing_custom_.service_files

  • Potresti considerare di aggiungere Restart=alwaysalla [Service]sezione per riavviarlo automaticamente se si blocca.

  • Inserire il file di servizio /etc/systemd/system/fatrat.servicee abilitarlo per l'avvio automatico tramitesystemctl enable fatrat.service


Grazie, funziona! L'unica differenza che dovevo fare era aggiungere User=my_user_namesotto la [Service]sezione per eseguire l'applicazione come mio utente. In questo modo l'applicazione può caricare i suoi file di configurazione da/home/my_user_name/.local/share/fatrat/data
Joudicek Jouda
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.