Comment arrêter Linux à une date et une heure spécifiques depuis un terminal?

46

Il semble que je puisse arrêter sudo shutdownen spécifiant une heure ou des minutes.

Existe-t-il un moyen de spécifier la date / heure pour l’arrêt?

Askar
la source

Réponses:

78

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.

Donc, par exemple:

shutdown -h 21:45

Cela fonctionnera shutdown -hà 21h45.


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

A. Utilisation de

Le atdémon est 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 y a trois façons de donner un ordre à at:

  1. Pipe-le:

    $ 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 transmettez-le à 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 atcommandes à partir de STDIN:

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

    Ensuite, appuyez sur CtrlDpour quitter le atshell. La lscommande sera exécutée dans une minute.

Vous pouvez donner des heures très précises dans le format de [[CC]YY]MMDDhhmm[.ss], comme dans

$ at -t 201403142134.12 < script.sh

Le script sera exécuté 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 consiste à utiliser le cronplanificateur 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 une heure précise. Chaque utilisateur a ses propres "crontabs" qui contrôlent les tâches à exécuter et à quel moment. Le format général d'une 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 fonctionnera lstous les jours à 14h04:

04 14 * * * ls

Pour configurer un cronjob pour une date spécifique:

  1. Créez une nouvelle 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 à 15h34 le 15 mars 2014 si ce jour est un vendredi (alors, OK, il se peut qu'il se répète plusieurs fois):

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

Cette réponse SO propose donc un moyen de le faire fonctionner une seule fois, mais je ne l’ai jamais utilisé et je ne peux donc pas en témoigner.

terdon
la source
2
Planifier un arrêt avec cron est une très mauvaise habitude. Soudain, vous vous demanderez pourquoi le serveur est en panne tous les lundis matins.
Ouki
4
@Ouki Im désolé mais je ne vois pas où je recommande d'utiliser cron pour arrêter. Je mentionne dans une parenthèse que c'est possible (c'est le cas) mais ne le recommande pas. Nous avons tendance à aimer les réponses complètes, c’est pourquoi j’ai proposé les autres alternatives sans jamais suggérer qu’elles soient utilisées shutdown. Je pense que pour cette mauvaise expérience, cela n'aurait pas pu être agréable.
terdon
2
C’est davantage une suggestion, car vous mélangez la shutdownplanification et cronla même réponse ... Qu'il s’agisse d’une station de travail ou d’un serveur de messagerie de 1 000 utilisateurs (ma triste expérience) concerne plutôt les conséquences d’une mauvaise habitude.
Ouki
3
Je suis avec Ouki ici. Lors de la discussion shutdown, il ne faut pas inclure cron. (En particulier avec quelqu'un qui ne sait pas pourquoi c'est une idée horrible.)
Ricky Beam
2
Je suis un peu confus que cette réponse semble conduire aux informations déjà assumées par la question. Il semble que le PO sache comment spécifier une heure d'arrêt, mais veut savoir comment spécifier une date et une heure. Ceci est abordé dans cette réponse, mais il est fourni comme s'il s'agissait d'une information supplémentaire, quand c'est ce qui était demandé en premier lieu.
Weeble
24

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

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

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

2) si cela ne vous dérange pas d’utiliser votre calculatrice et que vous souhaitez l’arrêter dans un délai de 24 heures (24 * 60 = 1440 minutes) et que vous êtes absolument certain que le système ne redémarrera pas entre:

shutdown -r +1440
Ndemou
la source
2
La raison de ma réponse ci-dessus: la réponse de terdon est correcte et très complète mais trop bavarde (au moins à
mon humble avis
2
Si vous parlez bavard, vous voulez dire utile et complet ... Votre réponse n'a même pas expliqué la atcommande.
Anthony
@ Anthony je crois que cette façon d'utiliser atne mérite aucune explication. Je peux voir que tu crois le contraire. Des esprits différents, des points de vue différents.
Ndemou
Cette réponse n'est plus vraie. Les commandes van Smoorenburg, Upstart et systemd shutdownne permettent pas de spécifier une date. Mais le jeu d'outils Nosh est shutdowncompatible avec la syntaxe BSD.
JdeBP
@JdeBP: quelle alternative des deux croyez-vous n'est plus vraie et avez-vous testé et vérifié qu'elles ne le sont pas? Je viens de tester les deux commandes sur 3 systèmes (Ubuntu 18.04, 16.04 et CentOS 7) et elles ont bien fonctionné. En ce qui concerne le reste de votre commentaire ("The van Smoorenburg ..."), je ne sais pas si c'est une clarification de votre affirmation que cette réponse n'est plus vraie ou un commentaire général. Peut-être devriez-vous poster une réponse avec un peu plus d'informations.
ndemou le
6

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

$ sudo shutdown -h 12:00

Options:

-h, -P, --poweroff

Éteignez la machine.

-r, --reboot

Redémarrez la machine.

-c

Annuler un arrêt en attente.

Hamed Kamrava
la source
5
Votre méthode ne montre pas comment arrêter à une date précise ...
Askar