web-dev-qa-db-fra.com

Comment arrêter Linux à une heure donnée à partir du terminal?

Il semble que je puisse arrêter en utilisant Sudo shutdown en spécifiant une heure ou des minutes.

Existe-t-il un moyen de spécifier datetime pour l'arrêt?

49
Askar

Vous pouvez le faire directement à partir du shutdown command, voir man shutdown:

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

[...]

   time   When to shutdown.

Ainsi, par exemple:

shutdown -h 21:45

Cela s'exécutera shutdown -h à 21h45.


Pour les commandes qui n'offrent pas cette fonctionnalité, vous pouvez essayer l'une des options suivantes:

A. Utilisation à

Le démon at est précisément conçu pour cela. Selon votre système d'exploitation, vous devrez peut-être l'installer. Sur les systèmes basés sur Debian, cela peut être fait avec:

Sudo apt-get install at

Il existe trois façons de donner une commande à at:

  1. Tuyau:

    $ 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. Enregistrez la commande que vous souhaitez exécuter dans un fichier texte, puis passez ce fichier à 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. Vous pouvez également passer des commandes at à partir de STDIN:

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

    Puis appuyez CtrlD pour quitter le shell at. La commande ls sera exécutée dans une minute.

Vous pouvez donner des heures très précises au format [[CC]YY]MMDDhhmm[.ss], un péché

$ at -t 201403142134.12 < script.sh

Cela exécutera le script script.sh à 21h34 et 12 secondes le 14 mars 2014.

B. Utilisation de cron (bien que ce ne soit pas une bonne idée pour l'arrêt)

L'autre approche utilise le planificateur cron qui est conçu pour effectuer des tâches à des moments spécifiques. Il est généralement utilisé pour des tâches qui seront répétées mais vous pouvez également donner un temps spécifique. Chaque utilisateur a ses propres "crontabs" qui contrôlent quels travaux sont exécutés et quand. Le format général d'un crontab est:

*     *     *     *     *  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)

Ainsi, par exemple, cela s'exécutera ls tous les jours à 14h04:

04 14 * * * ls

Pour configurer un cronjob pour une date spécifique:

  1. Créez un nouveau crontab en exécutant crontab -e. Cela fera apparaître une fenêtre de votre éditeur de texte préféré.

  2. Ajoutez cette ligne au fichier qui vient de s'ouvrir. Cet exemple particulier s'exécutera à 14h34 le 15 mars 2014 si ce jour est un vendredi (donc, OK, il pourrait s'exécuter plusieurs fois):

    34 14 15 5  /path/to/command        
    
  3. Enregistrez le fichier et quittez l'éditeur.

This SO suggère un moyen de le faire fonctionner une seule fois mais je ne l'ai jamais utilisé, je ne peux donc pas m'en porter garant.

79
terdon

Non, vous ne pouvez pas spécifier de date lors de la commande d'arrêt, mais deux alternatives existent:

1) Le plus simple est d'utiliser la commande at . L'exemple suivant exécutera shutdown +5 à une heure et un jour précis:

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

2) si cela ne vous dérange pas d'utiliser votre calculatrice et que vous voulez arrêter dans disons 24 heures (24 * 60 = 1440 minutes) et que vous êtes absolument sûr le système ne redémarrera pas entre:

shutdown -r +1440
26
ndemou

Il arrêtera votre système à 12h00:

$ Sudo shutdown -h 12:00

Options:

-h, -P, --poweroff

Mettez la machine hors tension.

-r, --reboot

Redémarrez la machine.

-c

Annuler un arrêt en attente.

6
Hamed Kamrava