Come arrestare Linux a un determinato datetime dal terminale?


46

Sembra che io possa spegnere usando sudo shutdownspecificando un tempo o minuti.

C'è un modo per specificare il datetime per l'arresto?

Risposte:


78

Puoi farlo direttamente dal shutdown command, vedi man shutdown:

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

Quindi, per esempio:

shutdown -h 21:45

Che funzionerà shutdown -halle 21:45.


Per i comandi che non offrono questa funzionalità, puoi provare uno di:

A. Utilizzo di a

Il atdemone è progettato proprio per questo. A seconda del sistema operativo, potrebbe essere necessario installarlo. Sui sistemi basati su Debian, questo può essere fatto con:

sudo apt-get install at

Esistono tre modi per dare un comando a at:

  1. Pipe it:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Salvare il comando che si desidera eseguire in un file di testo, quindi passare quel file a at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Puoi anche passare i atcomandi da STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Quindi, premere CtrlDper uscire dalla atshell. Il lscomando verrà eseguito tra un minuto.

Puoi dare tempi molto precisi nel formato di [[CC]YY]MMDDhhmm[.ss], come in

$ at -t 201403142134.12 < script.sh

Questo eseguirà lo script script.shalle 21:34 e 12 secondi il 14 marzo 2014.

B. Uso di cron (anche se questa non è una buona idea per lo spegnimento)

L'altro approccio sta utilizzando lo cronscheduler progettato per eseguire attività in momenti specifici. Di solito viene utilizzato per le attività che verranno ripetute, ma è anche possibile assegnare un orario specifico. Ogni utente ha i propri "crontab" che controllano quali lavori vengono eseguiti e quando. Il formato generale di un crontab è:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Quindi, ad esempio, questo verrà eseguito lsogni giorno alle 14:04:

04 14 * * * ls

Per impostare un cronjob per una data specifica:

  1. Crea un nuovo crontab eseguendo crontab -e. Verrà visualizzata una finestra del tuo editor di testo preferito.

  2. Aggiungi questa riga al file appena aperto. Questo esempio particolare verrà eseguito alle 14:34 del 15 marzo 2014 se quel giorno è un venerdì (quindi, OK, potrebbe essere eseguito più di una volta):

    34 14 15 5  /path/to/command        
    
  3. Salvare il file ed uscire dall'editor.

Questa risposta SO suggerisce un modo per farlo funzionare solo una volta ma non l'ho mai usato, quindi non posso garantirlo.


2
Pianificare uno spegnimento con cron è un'abitudine davvero negativa. All'improvviso ti chiederai perché il server è spento ogni lunedì mattina.
Ouki,

4
@Ouki Mi dispiace ma non vedo dove consiglio di usare cron per lo spegnimento. Tra parentesi menziono che è possibile (lo è) ma non lo consiglio. Qui tendiamo ad apprezzare risposte esaurienti, motivo per cui ho offerto le altre alternative senza mai suggerire che debbano essere utilizzate shutdown. Mi sento per quella brutta esperienza, che non avrebbe potuto essere piacevole.
terdon

2
Si tratta più di suggerimenti, in quanto si stanno mescolando la shutdownpianificazione e cronnella stessa risposta ... Sia che si tratti di una workstation o di un server di posta di 1000 utenti (la mia triste esperienza) è più sulle conseguenze di una cattiva abitudine.
Ouki,

3
Sono qui con Ouki. Quando si discute shutdown, non si dovrebbe includere cron. (specialmente con qualcuno che non saprà perché è un'idea orribile.)
Ricky Beam,

2
Sono un po 'confuso che questa risposta sembra condurre a informazioni già assunte dalla domanda. Sembra che l'OP sappia come specificare un orario per l'arresto, ma vuole sapere come specificare sia una data che un'ora. Questo è affrontato in questa risposta, ma è fornito come se fosse un'informazione extra, quando è quello che è stato chiesto in primo luogo.
Weeble,

24

No, non è possibile specificare una data al comando di arresto, ma esistono due alternative:

1) Il più semplice è usare il comando at . L'esempio seguente verrà eseguito shutdown +5a un'ora e un giorno specifici:

echo "shutdown +5" | at 10:05am 2019-01-19

2) se non ti dispiace usare la tua calcolatrice e vuoi spegnere in 24 ore (24 * 60 = 1440 minuti) e sei assolutamente sicuro che il sistema non si riavvierà tra:

shutdown -r +1440

2
Il motivo della mia risposta sopra: la risposta di terdon è corretta e molto esaustiva ma troppo chiacchierona (almeno IMHO)
ndemou,

2
Se per loquace vuoi dire utile e completo ... La tua risposta non ha nemmeno spiegato il atcomando.
Anthony,

@Anthony Credo che questo modo di usare atnon meriti alcuna spiegazione. Posso vederti credere diversamente. Menti diverse, opinioni diverse.
ndemou,

Questa risposta non è più vera. I comandi van Smoorenburg, Upstart e systemd shutdownnon consentono una specifica della data. Ma il set di strumenti di nosh shutdownfa, supportando la sintassi BSD di vecchia data.
JdeBP

@JdeBP: quale alternativa dei due ritieni non sia più vera e hai testato e verificato che non lo sono? Ho appena testato entrambi i comandi in 3 sistemi (Ubuntu 18.04,16.04 e CentOS 7) e hanno funzionato bene. Per quanto riguarda il resto del tuo commento ("The van Smoorenburg ...") Non sono sicuro che sia un chiarimento della tua affermazione che questa risposta non è più vera o un commento generale. Forse dovresti pubblicare una risposta con qualche informazione in più.
ndemou

6

Arresterà il sistema alle 12:00:

$ sudo shutdown -h 12:00

Opzioni:

-h, -P, --poweroff

Spegnere la macchina.

-r, --reboot

Riavvia la macchina.

-c

Annulla uno spegnimento in sospeso.


5
Il tuo metodo non mostra come arrestare in una data specifica ...
Askar
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.