Un altro modo possibile per raggiungere il tuo obiettivo è quello di utilizzare systemd unità timer
e unità di servizio invece di un cronjob .
File /etc/systemd/system/my-script.timer
:
[Unit]
Description=Timer for MyScript
[Timer]
OnBootSec=2min
OnUnitInactiveSec=1day 5min
[Install]
WantedBy=multi-user.target
File /etc/systemd/system/my-script.service
:
[Unit]
Description=MyScript
[Service]
Type=oneshot
ExecStart=/path/to/my-script.sh
Quindi eseguire i seguenti comandi:
sudo systemctl daemon-reload
sudo systemctl enable --now my-script.timer
Ciò abiliterà (= avvio automatico all'avvio) l'unità timer e la avvierà subito.
L'unità timer controlla l'unità di servizio, ovvero: avvia l'unità di servizio con lo stesso nome ( my-script
) 2 minuti dopo l'avvio del sistema e da quel momento riavvia l'unità di servizio 1 giorno e 5 minuti dopo che l'unità di servizio è diventata inattivo (= si è fermato).
Se il tempo di avvio è più di 2 minuti nel passato, il timer si attiva immediatamente.
Si noti che l'unità di servizio verrà eseguita come utente root . Per cambiarlo, aggiungi l' User=
attributo all'unità di servizio:
[Unit]
Description=MyScript
[Service]
Type=oneshot
User=djsony90
ExecStart=/path/to/my-script.sh
Per verificare lo stato, emettere:
systemctl status my-script.{timer,service}
● my-script.timer - Timer for MyScript
Loaded: loaded (/etc/systemd/system/my-script.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Sun 2019-03-31 13:47:29 CEST; 19min ago
Trigger: Mon 2019-04-01 13:52:59 CEST; 23h left
Mar 31 13:47:29 host systemd[1]: Started Timer for MyScript.
● my-script.service - MyScript
Loaded: loaded (/etc/systemd/system/my-script.service; static; vendor preset: enabled)
Active: inactive (dead) since Sun 2019-03-31 13:47:59 CEST; 18min ago
Process: 22833 ExecStart=/home/pduck/my-script.sh (code=exited, status=0/SUCCESS)
Main PID: 22833 (code=exited, status=0/SUCCESS)
Mar 31 13:47:29 host systemd[1]: Starting MyScript...
Mar 31 13:47:59 host systemd[1]: Started MyScript.
Qui possiamo vedere che l'unità timer è abilitata (il che significa che si avvierà all'avvio) e attualmente in attesa di 19 minuti. L'unità di servizio verrà attivata a Mon 2019-04-01 13:52:59
ca. 23 ore L'unità di servizio è attualmente inattiva. (Il mio script di test my-script.sh
, semplicemente fa un sleep 30
.) Possiamo anche vedere che l'unità di servizio è inattiva da allora Sun 2019-03-31 13:47:59
. L'aggiunta di 1 giorno e 5 minuti fornisce esattamente Mon 2019-04-01 13:52:59
qual è il tempo di attivazione dell'unità timer.
Ulteriori letture: