Attendez que la machine Linux soit redémarrée

2

J'ai un petit script pour installer une mise à jour sur ma machine distante.

Je souhaite redémarrer la machine à distance et si elle est redémarrée, continuez avec quelques commandes supplémentaires. Ce que je fais actuellement c'est:

ssh root@myMachine << COMMANDS_ISSUED
   ###... Tasks
   init 6
COMMANDS_ISSUED
sleep 180s
ssh root@myMachine << POST_REBOOT_COMMANDS
   ###.... More stuff
POST_REBOOT_COMMANDS

Y a-t-il une manière plus élégante de le faire? Vous aimez faire un ping sur la machine toutes les 5 secondes jusqu'à un maximum de 4 minutes? Je joue avec quelques machines Linux qui ont des temps de démarrage différents et si mon script se poursuivait immédiatement après le redémarrage, cela pourrait me protéger un peu. (Remarque: je ne veux pas paralléliser l'exécution sur toutes les machines, comme je veux voir pour chaque machine si tout a bien fonctionné)

Theo
la source

Réponses:

2

Je dirais que cinglez la machine jusqu'à ce qu'elle soit prête.

while ! ping -c 1 192.168.1.1 &>/dev/null; do :; done

"c 1" enverra une requête à la fois, donc une boucle par boucle. S'il n'y a pas de réponse, ping renvoie false et la boucle continue.

Le corps de la boucle est vide - vous pouvez y placer une courte commande de sommeil si vous le souhaitez. Sinon, les deux points ":", qui est la [commande non-op] [1], sont utilisés. C'est parce que vous ne pouvez pas avoir un corps de boucle vide.

pdah
la source
Malgré le fait que j'ai besoin d'utiliser ping -n à la place de ping -c, cela fonctionne comme un charme, merci :)
Theo
-1

vous pouvez définir une crontab comme ceci:

@reboot script-to-execute
David Dai
la source