Question Programmer facilement une commande à exécuter plus tard?


Quel est un moyen simple d'exécuter une commande, par exemple dans 8 heures? Je peux penser de cette façon:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

Y a-t-il une manière plus "correcte"?


72
2017-08-30 11:25


origine


Y a-t-il quelque chose qui ne va pas avec nohup + sleep? Pourquoi est-ce "impropre"? - cprn


Réponses:


Vous pouvez utiliser le at commander. le at exécuter des commandes ultérieurement. le at L'utilitaire doit lire les commandes de l'entrée standard et les regrouper en tant que travail pour être exécuté ultérieurement.

Habituellement, at est installé par défaut dans Ubuntu, mais si votre version ne l’inclut pas, installez via:

sudo apt-get install at

Pour plus d'informations, des options, des exemples et d'autres, consultez le Ubuntu Manpage Repository

Exemple:

at now +8 hours -f ~/myscript.sh

Vous pouvez également utiliser des raccourcis pratiques, tels que tomorrow ou noon, un péché

echo "tweet fore" | at teatime 

Attention: Cela va exécuter la commande à gauche du tuyau immédiatement mais seulement présenter sa sortie plus tard. L'exemple montre également comment canaliser des actions dans at. at -c est la façon dont vous pouvez examiner les actions planifiées, que vous pouvez facilement répertorier avec leur numéro, comme avec:

at -c 3

106
2017-08-30 11:39



Il pourrait être utile d'ajouter un exemple d'utilisation simple qui traite plus spécifiquement de la question de l'affiche originale, par ex. at now +8 hours -f ~/myscript.sh - steeldriver
De plus, il y a at 8:00 pour exécuter la commande à une heure absolue, et batch pour "quand il semble que l'ordinateur est inactif" - Simon Richter
Au cas où quelqu'un se demanderait, teatime est à 16h. Pour certaines raisons, il n'est pas mentionné dans manpages.ubuntu.com/manpages/raring/man1/at.1posix.html mais c'est dans man at et ici manpages.ubuntu.com/manpages/raring/en/man1/at.1.html. - Dan
Peut-être pouvons-nous mentionner que l'utilitaire "at" n'est pas installé par défaut et si quelqu'un veut l'obtenir, installez simplement le package "at"? Edit: Quoi qu'il en soit, j'ai simplement édité la réponse (également corrigé le lien de la page de manuel). - heartsmagic
Attention que tuyauterie dedans lancera la commande immédiatement et ne planifiera que la sortie. J'ai eu une impression 3D de 4 heures en échec parce que je voulais planifier gpio write 8 1 mais il a exécuté tout de suite. - Maciej Swic


Oui, vous pouvez définir un travail cron.

Par exemple, si l'heure est 14:39:00 et aujourd'hui vendredi 30 août, vous pouvez ajouter le travail cron suivant (à exécuter après 8 heures) dans votre fichier crontab en utilisant crontab -e commander:

39 22 30 8 5  /path/to/mycommand.sh

Plus à propos:


9
2017-08-30 11:34



Ok, oui, j'aurais dû mentionner que je connais des emplois Cron. C'est encore plus compliqué car alors il reste indéfiniment dans la crontab, non? - Steve Bennett
@ RaduRădeanu: avec cron, veillez à ce qu'il puisse à nouveau tirer dans quelques années (quand il y a un autre 30 août qui se passe un vendredi) ... - Olivier Dulac
C'est un hack intelligent. Cependant, "at" est une bien meilleure solution. Que se passerait-il si l'ordinateur était éteint à 14h39? - emory
Err ce n'est toujours pas mon point. Mon point est que le texte que vous avez entré sera (je pense) littéralement encore assis dans votre crontab après l'événement, créant une autre tâche de nettoyage pour vous. - Steve Bennett
@SteveBennett Oui, vous avez raison. La commande restera dans votre crontab jusqu'à ce que vous le retiriez. Un an plus tard, quand vous avez oublié qui l'a mis et pourquoi, vous allez vous demander ce que vous devez faire avec la commande. - Paddy Landau


Utilisez l'interface graphique basée sur Gnome pour cron, at, etc:

L'introduction de la CronHowto suggère d'utiliser le gnome-schedule gui, qui est beaucoup plus agréable que de taper tous les déchets dans le terminal (en particulier pour les utilisateurs Ubuntu "moyens" qui ne sont pas des utilisateurs "nix / bsd" puissants).

Exécutez-le en utilisant Unity Dash (ou un autre menu d'applications) pour rechercher Tâches planifiées ou en cours d'exécution gnome-schedule.

Sur les systèmes Ubuntu basés sur Gnome Outil de tâches planifiées Gnome (à partir du calendrier gnome   package) dans Applications -> System Tools fournit une interface graphique avec invite   pour utiliser Cron. Le site du projet est à http://gnome-schedule.sourceforge.net/; la   le logiciel est installable à partir du Software Center ou en tapant

sudo apt-get install gnome-schedule

dans un terminal.

En utilisant gnome-schedule, pour un script dans votre répertoire personnel, une nouvelle commande "at" serait configurée avec ce type de fenêtre:

enter image description here


7
2017-07-16 19:20





J'ai trouvé un moyen rapide et sale de le faire avant de découvrir at était une chose

Disons que vous voulez que votre script s'exécute à midi:

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

Dites que vous voulez qu'il fonctionne demain à midi (aujourd'hui, c'est le 24 novembre pour moi):

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh

3
2017-11-24 06:07



Pour les deux personnes qui ont voté cette réponse, veuillez utiliser at, cron, ou toute autre application de planificateur réel. La planification des tâches est difficile et non une roue à réinventer. - dimo414
@ dimo414 Quel est le problème avec ma méthode? - wjandrea
Au minimum, il est occupé à attendre, ce qui est un gaspillage. Pire encore, ce n'est pas garanti d'être correct; il est parfaitement possible (si improbable) que la condition soit manquée. Baser votre planificateur sur des expressions régulières est également très sujet aux erreurs. Cela peut fonctionner bien assez, mais n'a aucun avantage sur at. - dimo414
(À part: je n'ai pas baissé votre réponse, je ne pense pas que les gens devraient l'utiliser) - dimo414
Une autre raison d'utiliser at est parce que ses travaux survivront à un redémarrage. - manatwork