spegnimento a una data specifica


11

So che puoi programmare un arresto per un tempo specifico tramite shutdown -h 21:45e che non dovresti usare crontab per tali cose a causa della loro natura ripetitiva. Come posso programmare uno spegnimento per una data specifica come il 31 agosto alle 20:00?

Risposte:


7

Le versioni recenti di Ubuntu usano systemd e quando lo scheduler convenzionale atde associato atper i comandi singoli non è installato o non è in esecuzione un comando unico può essere programmato con ilsystemd-run quale è un po 'più semplice che generare manualmente un systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now

2
L'ironia è che l'avvio di un intero servizio per fare questo è quasi superfluo. Lo stesso meccanismo di spegnimento di systemd supporta punti temporali arbitrari. Il suo strumento da riga di comando semplicemente non offre la possibilità di accedervi, perché non è all'altezza della riga di comando di BSD shutdown. Come ho scritto in un'altra risposta, tu che vuoi questo potresti provare a persuadere le persone del sistema a rendere il loro shutdownstrumento più capace, con una sintassi di decenni, piuttosto che andare in giro con le case systemd-run.
JdeBP,

Ottengo specifiche del calendario non valide: 2019-08-31 20:00:00 CET
HdM Upload

12

Il atcomando serve per programmare singole esecuzioni future.

per esempio

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019

("<EOT>" è stato prodotto premendo control-D)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh

Puoi inserire il tuo shutdowncomando qui.


Sì! Mi ero dimenticato di atquando ho pubblicato - atè sicuramente pensato per questo in generale, anche se in un'azienda il metodo accettato può essere ato cron, a seconda delle convenzioni relative alla gestione / distribuzione della configurazione.
flow2k,

Non è esattamente equivalente, nota. unix.stackexchange.com/q/465322/5132
JdeBP

atè anche in grado di ricevere i comandi da un tubo: echo "echo yup > $(tty)" | at now.
mosvy,

7

Mentre atè il modo ovvio per farlo, penso che sopravviverà agli arresti, quindi se la macchina si riavvia prima dell'arresto programmato, potrebbe spegnersi di nuovo all'ora programmata. Pertanto, usando bash e GNU date possiamo usare uno spegnimento ritardato.

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

NB: questo è preciso solo per un minuto. Funziona convertendo il tempo programmato, e ora in secondi dall'epoca UNIX, calcolando la differenza, convertendo in minuti e quindi usando questo come ritardo allo spegnimento. Non funzionerà correttamente se l'orario pianificato è passato.


3

Usa un shutdowncomando migliore .

I comandi van Smoorenburg, Upstart e systemd shutdownnon consentono una specifica della data. Ma il shutdowncomando BSD prende un valore di data nella sua specifica di quando chiudere, nel modulo yymmddhhmm. Questo è il caso da 4BSD, e rimane così con FreeBSD e OpenBSD. NetBSD lo ha esteso a ccyymmddhhmm.

Poiché il set di strumenti nosh è utilizzabile anche sui BSD, ho dato al mio shutdowncomando la stessa funzionalità, estendendolo a CCYYMMDDHHMMNetBSD. E poiché il set di strumenti nosh è utilizzabile anche su Linux, ciò fornisce a Linux un comando di spegnimento che richiede date.

Funziona ovviamente con il nosh system-manager. Funziona anche con alcuni altri sistemi. Invia segnali al processo n. 1 per mettere in atto roba e gli stessi segnali sono compresi da alcuni altri gestori di sistema, come ad esempio systemd, che possono anche essere chiusi usando.

Potresti usarlo o uno strumento simile; oppure potresti provare a persuadere gli autori di altri shutdownprogrammi Linux ad estendere i loro strumenti per essere altrettanto capaci del BSD shutdown.

Ulteriori letture

  • Jonathan de Boyne Pollard (2018). shutdown. pagine di manuale di nosh toolset. Software.
  • Jonathan de Boyne Pollard (2018). system-manager. pagine di manuale di nosh toolset. Software.
  • shutdown. Manuale del gestore di sistema . Pagine del manuale di NetBSD. 2011-11-04.
  • shutdown. Manuale dei gestori di sistema di FreeBSD . 2018/01/01.
  • shutdown. Pagine del manuale di OpenBSD. 2015/01/21.
  • /unix//a/465337/5132

1

Per eseguire il lavoro solo quest'anno:

0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now

Per eseguire il lavoro ogni anno:

0 20 31 8 * /sbin/shutdown now

-4

Potrebbe esserci un'opzione per inserire l'anno al shutdowncomando, ma cron può essere usato per eseguire i comandi una sola volta in un determinato momento. Per il tuo esempio, prova

0 0 31 8 ? 2019  shutdown

Attenzione: quanto sopra non è una sintassi cron standard.


2
1. Questo non dice 20:00 pm, dice mezzanotte. 2. Non ho mai visto un cronjob con campi SIX per i tempi. A quale implementazione cron stai riferendo?
Wildcard

2
Non c'è un yearcampo nel crontabprogramma
Seamus,

Mi sono reso conto in seguito che questa sintassi non è "cron standard", quindi sono d'accordo, non dovrebbe essere preso al valore nominale. L'OP sembra implicare che ci sia una penalità per le prestazioni associata all'uso di cron, quindi nella mia Risposta, ho cercato di chiarire - non c'è alcun intrinsecamente inefficiente sull'implementazione di cron che lo rende inadatto per un'attività una tantum. È anche quello che pensi?
flow2k,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.