Esegui qualsiasi eseguibile come servizio in Linux
Eseguire qualsiasi eseguibile come servizio linux
Ecco un insieme di istruzioni su Come Configurare per Eseguire qualsiasi Esecutabile come Servizio in Linux con Systemd.
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