Utilizzo dei timer Systemd come sostituzione dei Cron Jobs

Utilizzo dei timer Systemd come sostituzione dei Cron Jobs
Fotografia di una donna che tiene in mano una sveglia mentre è davanti a un computer portatile.

Come utente Linux, probabilmente hai familiarità con cron. Ha funzionato come pianificatore di lavori basato sul tempo Unix per molti anni. Ora molti utenti stanno usando i timer Systemd per sostituire il dominio di cron. Questo articolo discuterà le basi su come impostare il tuo timer systemd e assicurarti che funzioni correttamente sul tuo sistema.

Perché usare i timer Systemd invece di Cron?

Uno dei maggiori punti di forza di Systemd Timers è che è completamente integrato nell’ecosistema Systemd. Ciò significa che è molto facile pianificare e collegare tra loro varie unità di servizio Systemd, rendendo più semplice l’automazione delle attività rispetto a un tradizionale cron daemon.

Un terminale che mostra un servizio di sistema utilizzando un timer Systemd.

Un altro vantaggio di Systemd Timers rispetto a Cron è che fornisce un controllo più dettagliato su come attivare i tuoi lavori pianificati. Ad esempio, Systemd Timers ha una OnBootSecvariabile che ti consente di ritardare la tua unità di servizio fino a quando non trascorre un certo lasso di tempo dopo un avvio riuscito.

Un terminale che mostra un esempio di configurazione del timer con una variabile di trigger speciale.

Infine, i timer Systemd sono anche incredibilmente precisi rispetto a un demone cron standard. Di default, possono tracciare ed eseguire lavori fino a un microsecondo usando la loro AccuracySecvariabile. Questo è incredibilmente utile se si sta eseguendo un computer che richiede tempi esatti per le sue attività pianificate.

Installazione dei timer Systemd

I timer sono una funzione integrata di Systemd. Ciò significa che se stai usando Systemd come tuo demone init, come nel caso di distribuzioni Linux popolari come Arch, Fedora e Ubuntu, la tua macchina sta già sfruttando questa funzionalità su alcuni dei suoi processi di sistema.

Per verificare se la tua distribuzione esegue Systemd, puoi eseguire il seguente comando:

In questo modo verranno elencati tutte le unità, i dispositivi e i timer Systemd attualmente in esecuzione sul sistema.

Un terminale che mostra l'output del comando systemctl su una distribuzione Linux basata su Systemd.

Elenca i timer esistenti

Il modo più semplice per verificare se un timer è in esecuzione sul tuo account utente corrente è con il seguente comando:

Puoi anche usare il --allflag per controllare ogni singolo timer nel sistema, compresi quelli inattivi:

In questo modo verranno stampate la data e l’ora di attivazione di ciascun timer, il conto alla rovescia fino a quel momento, quanto tempo è trascorso dall’ultima esecuzione, il nome dell’unità del timer stesso e il servizio attivato da ciascuna unità timer.

Un terminale che elenca tutti i timer Systemd in esecuzione nella sessione corrente.

Creazione di un nuovo servizio e timer

Il primo passo per creare un timer Systemd è creare o trovare un servizio esistente a cui collegarlo. Questo perché ogni timer deve essere collegato a un’unità di servizio padre. Questa sezione ti guiderà attraverso il processo di creazione di un timer per un servizio Systemd personalizzato.

Inizia creando i file vuoti “.service” e “.timer” nella tua directory home:

Apri il tuo nuovo file di servizio utilizzando il tuo editor di testo preferito:

Incolla il seguente modello all’interno del tuo nuovo file di servizio:

Salva il tuo file “.service”, quindi apri il tuo file “.timer” vuoto utilizzando lo stesso editor di testo:

Incolla il seguente blocco di codice all’interno del tuo file timer:

Vai alla [Timer]sezione, quindi sostituisci il valore della OnCalendarvariabile con la data e l’ora in cui vuoi che la tua unità Systemd venga eseguita. Nel mio caso, voglio che il mio programma venga eseguito esattamente alle 11:43 AM ogni giorno.

Un terminale che evidenzia il valore del timer personalizzato per la variabile OnCalendar.

Creazione di un timer monotono

Oltre a impostare un timer che funziona in una data specifica, è anche possibile creare un timer monotono che funziona in base all’attuale uptime del computer. Ciò è utile se si sta pianificando un’attività su una macchina che non è costantemente in esecuzione, come un desktop o un laptop.

Per iniziare, apri il file “.timer”, quindi scorri verso il basso fino alla [Timer]sezione.

Un terminale che evidenzia la posizione del

Rimuovi entrambe le variabili OnCalendare Persistent, quindi aggiungi OnBootSecseguito da un intervallo di tempo per quando vuoi eseguire il tuo file di unità. Ad esempio, impostandolo su “1 ora” dirai a Systemd di avviare il tuo comando un’ora dopo che il tuo computer si è avviato correttamente.

Un terminale che evidenzia la variabile OnBootSec che sostituisce le variabili di temporizzazione originali del file timer personalizzato.

Aggiungi la OnUnitActiveSecvariabile appena sotto OnBootSec, quindi specifica l’intervallo in cui vuoi che il timer funzioni continuamente dopo l’avvio del sistema. Nel mio caso, lo imposterò su “30min” poiché voglio che il mio task venga eseguito ogni 30 minuti dopo la sua esecuzione iniziale.

Un terminale che evidenzia la variabile OnUnitActiveSec che converte il timer a esecuzione singola in un timer monotono.

Creazione di un timer transitorio

Uno dei vantaggi dell’integrazione profonda di Systemd Timer in Systemd è che può trarre vantaggio dagli altri programmi adiacenti del demone init. Ad esempio, è possibile usare i timer con Systemd-run per creare lavori transitori una tantum sulla tua macchina.

Per creare un semplice timer temporaneo, incolla la seguente riga di codice in una sessione del terminale, quindi sostituisci il valore della --on-calendarvariabile con l’intervallo in cui desideri che il comando venga eseguito:

Aggiungi il comando che vuoi eseguire alla fine della riga, quindi premi Enterper pianificarlo.

È anche possibile creare timer monotoni temporanei utilizzando entrambe le variabili --on-boote --on-unit-active:

Conferma che il tuo timer temporaneo è ora in coda nello scheduler dei lavori di Systemd eseguendo il seguente comando:

Un terminale che mostra lo stato di un timer transitorio caricato nel sistema.

Esecuzione del timer Systemd

Per eseguire il tuo nuovo Systemd Timer, devi assicurarti che sia caricato correttamente nella tua sessione Systemd corrente. Per farlo, copia sia il tuo servizio personalizzato che il file timer nella directory di servizio del tuo Systemd:

Ricarica la configurazione corrente del demone init:

Attiva sia il servizio che il timer che hai creato utilizzando systemctl:

Controlla di aver caricato correttamente il tuo nuovo timer eseguendo: sudo systemctl status my-new-timer.timersu una nuova sessione di terminale. In questo caso, puoi vedere che il mio timer è ora programmato e pronto per l’esecuzione del sistema.

Un terminale che mostra il file del timer in esecuzione nel sistema corrente.

Imparare a pianificare le attività usando Systemd Timers è solo una parte della comprensione di come funziona la tua macchina Linux sotto il cofano. Approfondisci i meccanismi interni di questo meraviglioso sistema operativo leggendo il nostro articolo di confronto su Grub e Systemd-boot.

Credito immagine: Alexandr Podvalny tramite Unsplash . Tutte le modifiche e gli screenshot sono di Ramces Red.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *