arrêt à une date précise

11

Je sais que vous pouvez planifier un arrêt pour une heure spécifique via shutdown -h 21:45et que vous ne devez pas utiliser de crontabs pour de telles choses en raison de leur nature répétitive. Comment puis-je planifier un arrêt pour une date spécifique comme le 31 août à 20h00?

Téléchargement HdM
la source

Réponses:

7

Les versions récentes d'Ubuntu utilisent systemd et lorsque le planificateur conventionnel atdet associé atpour les commandes uniques n'est pas installé ou n'exécute pas de commande unique, il peut être planifié avecsystemd-run ce qui est un peu plus facile que de générer manuellement un systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
la source
2
L'ironie est que le démarrage d'un service entier pour ce faire est presque superflu. Le mécanisme d'arrêt de systemd lui-même prend en charge des points arbitraires dans le temps. Son outil de ligne de commande ne fournit tout simplement pas la possibilité d'y accéder, car il n'est pas à la hauteur de la ligne de commande du BSD shutdown. Comme je l'ai écrit dans une autre réponse, vous qui voulez cela pourrait essayer de persuader les gens du système de rendre leur shutdownoutil plus performant, avec une syntaxe de plusieurs décennies, plutôt que de faire le tour des maisons avec systemd-run.
JdeBP
Je reçois une spécification de calendrier non valide: 2019-08-31 20:00:00 CET
HdM Télécharger
12

La atcommande sert à planifier une seule exécution future.

par exemple

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

(le "<EOT>" a été produit en appuyant sur control-D)

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

Vous pouvez mettre votre shutdowncommande ici.

Stephen Harris
la source
Oui! J'avais oublié atquand j'ai posté - atest définitivement destiné à cela en général, bien que dans une entreprise, la méthode acceptée soit atou cron, selon les conventions liées à la gestion / déploiement de la configuration.
flow2k
Ce n'est pas exactement équivalent, notez. unix.stackexchange.com/q/465322/5132
JdeBP
atest également capable de recevoir des commandes à partir d' un tube: echo "echo yup > $(tty)" | at now.
mosvy
7

Bien que ce atsoit la façon la plus évidente de le faire, je pense que cela survivra aux arrêts, donc si la machine redémarre avant l'arrêt prévu, elle pourrait s'arrêter à nouveau à l'heure prévue. Par conséquent, en utilisant bash et GNU date, nous pouvons utiliser un arrêt différé.

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

NB: Ceci n'est précis qu'à une minute. Il fonctionne en convertissant l'heure planifiée, et maintenant en secondes depuis l'époque UNIX, en calculant la différence, en convertissant en minutes, puis en l'utilisant comme délai d'arrêt. Cela ne fonctionnera pas correctement si l'heure prévue est passée.

CSM
la source
3

Vous utilisez une meilleure shutdowncommande.

Les commandes van Smoorenburg, Upstart et systemd shutdownne permettent pas de spécification de date. Mais la shutdowncommande BSD prend une valeur de date dans sa spécification du moment de l'arrêt, sous la forme yymmddhhmm. Cela a été le cas depuis 4BSD, et le reste avec FreeBSD et OpenBSD. NetBSD l'a étendu à ccyymmddhhmm.

Parce que le jeu d'outils nosh est également utilisable sur les BSD, j'ai donné à ma shutdowncommande la même capacité, en l'étendant CCYYMMDDHHMMpar NetBSD. Et parce que le jeu d'outils nosh est également utilisable sur Linux, cela donne à Linux une commande d'arrêt qui prend des dates.

Cela fonctionne bien sûr avec le nez system-manager. Il fonctionne également avec certains autres systèmes. Il envoie des signaux au processus n ° 1 pour mettre en œuvre des éléments et les mêmes signaux sont compris par certains autres gestionnaires de système, tels que systemd, qui peuvent également être arrêtés en l'utilisant.

Vous pouvez l'utiliser, ou un outil comme celui-ci; ou vous pourriez essayer de persuader les auteurs d'autres shutdownprogrammes Linux d'étendre leurs outils pour être aussi capables que le BSD shutdown.

Lectures complémentaires

  • Jonathan de Boyne Pollard (2018). shutdown. pages de manuel de nosh toolset. Logiciels.
  • Jonathan de Boyne Pollard (2018). system-manager. pages de manuel de nosh toolset. Logiciels.
  • shutdown. Manuel du gestionnaire de système . Pages du manuel NetBSD. 2011-11-04.
  • shutdown. Manuel des gestionnaires de systèmes FreeBSD . 2018-01-01.
  • shutdown. Pages du manuel OpenBSD. 2015-01-21.
  • /unix//a/465337/5132
JdeBP
la source
1

Pour exécuter le travail uniquement cette année:

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

Pour exécuter le travail chaque année:

0 20 31 8 * /sbin/shutdown now
Freddy
la source
-4

Il peut y avoir une option pour saisir l'année dans la shutdowncommande, mais cron ne peut être utilisé pour exécuter les commandes qu'une seule fois à un moment précis. Pour votre exemple, essayez

0 0 31 8 ? 2019  shutdown

Attention: ce qui précède n'est pas la syntaxe cron standard.

flow2k
la source
2
1. Cela ne dit pas 20h00, il est minuit. 2. Je n'ai jamais vu de cronjob avec des champs SIX pour le timing. À quelle implémentation cron faites-vous référence?
Wildcard
2
Il n'y a pas de yearchamp dans le crontabcalendrier
Seamus
J'ai réalisé par la suite que cette syntaxe n'est pas "cron standard", donc je suis d'accord, elle ne devrait pas être prise à sa valeur nominale. OP semble impliquer qu'il y a une pénalité de performance associée à l'utilisation de cron, donc dans ma réponse, j'ai cherché à clarifier - il n'y a pas intrinsèquement inefficace sur l'implémentation de cron qui rend impropre à une tâche ponctuelle. Est-ce aussi ce que vous pensez?
flow2k