Come si usa
- Inserisci il nome del servizio, il comando con il percorso completo e la directory di lavoro.
- Imposta l’utente, la politica di riavvio e le eventuali variabili d’ambiente.
- Se vuoi, aggiungi un hardening di base o una pianificazione (OnCalendar) per creare un timer.
- Copia i file generati, oppure incolla i comandi di installazione in una shell root sul server.
Opzioni spiegate
- Type
- simple va bene per i programmi che restano in primo piano; oneshot va bene per gli script eseguiti una sola volta, come le attività pianificate.
- Restart
- In caso di errore riavvia il servizio quando termina con un errore o va in crash; Sempre lo riavvia anche dopo una chiusura normale.
- OnCalendar
- Quando scatta il timer, ad es. daily oppure *-*-* 03:00:00 per le 3 di notte ogni giorno. Prova le espressioni con systemd-analyze calendar.
Esempio: un lavoro notturno come timer
Per eseguire uno script ogni notte alle 3, imposta il Comando (ExecStart) su /usr/local/bin/backup.sh, il nome del servizio su backup, Type su oneshot e Restart su Mai, poi seleziona «Esegui con una pianificazione (crea un .timer)» e «Hardening di base». Con l’utente e la directory di lavoro predefiniti, il generatore produce due file. backup.service:
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only
e backup.timer:
[Unit]
Description=Run backup on a schedule
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
Con il timer attivo cambiano due cose. Il file del servizio perde la sezione [Install], perché è il timer ad avviarlo, e i comandi di installazione abilitano il timer anziché il servizio:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f
Il Type non viene cambiato per te quando selezioni l’opzione del timer, quindi scegli oneshot tu stesso per i lavori che terminano. Un servizio oneshot combinato con Restart Sempre non è valido, quindi il generatore omette Restart e mostra un avviso.
Domande frequenti
Dove metto il file?
In /etc/systemd/system/. Poi esegui systemctl daemon-reload e systemctl enable --now <name>.service — i comandi generati fanno tutto questo.
Perché il mio servizio fallisce con “Executable path is not absolute”?
Le versioni più vecchie di systemd richiedono il percorso completo del programma in ExecStart. Trovalo con which, ad es. which node.
Timer o cron?
I timer scrivono nel journal, possono recuperare le esecuzioni perse mentre il server era spento e non girano mai due volte insieme. cron è più semplice per i comandi di una riga e funziona ancora benissimo.
Privacy
Questo strumento funziona interamente nel tuo browser. File e testi vengono elaborati sul tuo dispositivo e non vengono mai caricati sui nostri server.