Esegui qualsiasi eseguibile come servizio in Linux

Eseguire qualsiasi eseguibile come servizio linux

Indice

Ecco un insieme di istruzioni su Come Configurare per Eseguire qualsiasi Esecutabile come Servizio in Linux con Systemd.

linux cogs Sopra è un’immagine generata da AI (con il modello Flux 1 dev) che rappresenta le ruote dentate che simboleggiano l’approccio DIY di Linux.

Systemd

Systemd è un gestore di sistema e servizi e uno strumento di inizializzazione utilizzato in alcuni distro Linux.

Alcuni dei distro più popolari con systemd:

  • Ubuntu 16.04 o versioni successive
  • Debian Jessie o versioni successive
  • Arch Linux
  • CentOS 7 / RHEL 7 o versioni successive
  • Fedora 15 o versioni successive

systemctl

systemctl è uno strumento da riga di comando per controllare il systemd.

Elenco di tutti i servizi

Per elencare tutti i servizi, esegui

systemctl list-units --type=service

Creare un file di servizio

Naviga nella directory dei servizi systemd e crea un nuovo file con estensione .service13:

sudo nano /etc/systemd/system/your_service_name.service

Configura il file del servizio:

Aggiungi il seguente contenuto al file, adattando i valori necessari135:

[Unit]
Description=Descrizione del tuo servizio
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/your/executable/directory
ExecStart=/path/to/your/executable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Salva e chiudi il file.

Ritardo nell’avvio del servizio

Se sospetti che esistano problemi di timing durante l’avvio del servizio, considera l’aggiunta di un ritardo alla configurazione del servizio:

[Service]
ExecStartPre=/bin/sleep 10

Dipendenze del servizio

Per configurare le dipendenze del servizio: nella sezione [Unit] del file di configurazione del servizio,

aggiungi le seguenti direttive:

Utilizza After= per specificare i servizi che devono avviarsi prima del tuo servizio:

After=network.target other_service.service

Utilizza Requires= per definire dipendenze obbligatorie:

Requires=required_service.service

Utilizza Wants= per le dipendenze opzionali:

Wants=optional_service.service

Riavvia systemd per riconoscere il nuovo servizio

sudo systemctl daemon-reload

Verifica le dipendenze del servizio

sudo systemctl list-dependencies your_service_name.service

Abilita il servizio per l’avvio all’avvio del sistema

sudo systemctl enable your_service_name.service

Per verificare che il servizio sia abilitato per l’avvio all’avvio del sistema:

sudo systemctl is-enabled your_service_name.service

Avvia il servizio

sudo systemctl start your_service_name.service
# o
sudo systemctl restart your_service_name.service

Verifica lo stato del servizio

Se qualcosa è andato storto, controlla i log e lo stato del servizio Linux:

sudo systemctl status your_service_name.service

o

sudo journalctl -u your_service_name.service

Per gli script Python

ExecStart=/path/to/conda/envs/my_env_name/bin/python /path/to/executable.py

Commenti

Ora puoi gestire il tuo servizio utilizzando i comandi systemctl, come start, stop, restart e status.

Per gli eseguibili che richiedono parametri, modifica opportunamente la riga ExecStart nel file del servizio.

Ad esempio, se devi eseguire un’applicazione Java, utilizza il comando Java completo nella riga ExecStart.

Ricorda di adattare i permessi dei file e la proprietà come necessario, e assicurati che l’eseguibile abbia i permessi corretti per l’esecuzione.

Controllo dei servizi systemd con chkservice

Invece di eseguire

sudo systemctl start some-serviceservice
# o
sudo systemctl restart some-serviceservice

Puoi utilizzare lo strumento UI per la console. Semplice e leggero

sudo apt-get install chkservice

sudo chkservice