107 votes

Programmer une commande pour qu'elle soit exécutée plus tard ?

Quel est le moyen le plus simple d'exécuter une commande, disons, dans 8 heures ? Je pense à cette façon :

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

Existe-t-il une méthode plus "correcte" ?

141voto

Mitch Points 102545

Vous pouvez utiliser le at commande. Le site at exécuter des commandes à un moment ultérieur. Le site at L'utilitaire lit les commandes à partir de l'entrée standard et les regroupe sous forme d'at-job, pour les exécuter ultérieurement.

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

sudo apt-get install at

Pour plus d'informations, d'options, d'exemples et autres, voir la page de manuel dans man 1 at .

Exemple d'une spécification de temps relatif (notez l'espace entre + et la durée) :

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

Vous pouvez également utiliser des raccourcis pratiques, tels que tomorrow o noon , comme dans

echo "tweet fore" | at teatime 

Nota: Cela va exécuter la commande à gauche du tuyau immédiatement - et sa sortie (qui est acheminée vers at ) sera géré par at à l'heure prévue. Ainsi, la commande ci-dessus programme tweet fore à exécuter à l'heure du thé.

L'exemple montre également comment vous pouvez intégrer des actions dans les éléments suivants at . at -c est la façon dont vous pouvez examiner les actions programmées, que vous pouvez commodément énumérer avec leur numéro, comme avec :

at -c 3

13voto

Radu Rădeanu Points 156862

Oui, vous pouvez définir une tâche cron.

Par exemple, s'il est actuellement 14:39:00 et que nous sommes le vendredi 30 août, vous pouvez ajouter la tâche cron suivante (qui sera exécutée après 8 heures) dans votre fichier crontab en utilisant crontab -e commandement :

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

En savoir plus :

13voto

user29020 Points 513

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

L'introduction de la CronComment faire suggère d'utiliser le gnome-schedule ce qui est beaucoup plus agréable que de taper toutes les ordures dans le terminal (surtout pour les utilisateurs "moyens" d'Ubuntu qui ne sont pas des utilisateurs "puissants" de *nix/bsd).

Exécutez-le en utilisant le 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, l'outil Gnome Scheduled tasks (à partir de l'outil gnome-schedule ) dans Applications --> Outils système fournit une interface graphique avec des messages d'invite pour utiliser Cron. Le site web du projet est le suivant http://gnome-schedule.sourceforge.net/ ; le est installable à partir du Centre de logiciels ou en tapant

sudo apt-get install gnome-schedule

dans un terminal.

Utilisation de gnome-schedule pour un script dans votre répertoire personnel, une nouvelle commande "at" serait mise en place en utilisant ce type de fenêtre :

enter image description here

9voto

wjandrea Points 13147

Vérifiez la sortie de date dans une boucle. C'est un moyen rapide et sale de faire cela, comme si vous ne pouviez pas utiliser at , cron ou d'autres outils.

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

until [[ $(date +%H:%M) == 12:00 ]]; do
    sleep 30
done
./mycommand.sh

Disons que vous voulez qu'il soit exécuté demain à midi (pour moi, c'est le 24 novembre) :

until [[ $(date +%d_%H:%M) == "25_12:00" ]]; do 
    sleep 30
done
./mycommand.sh

Auparavant, cette réponse recommandait l'utilisation de regex, qui comporte certains pièges, comme un grand nombre de caractères spéciaux. Elle recommandait également de faire correspondre la chaîne de date entière, ce qui est plus susceptible d'entraîner des erreurs puisque cela dépend de la langue. Par exemple, j'utilise certains formats de langue française puisque je vis au Québec, donc si j'oublie cela et que j'écris until [[ $(date) == "25 12:00" ]] il ne correspondra jamais parce que l'ordre français est "jour mois année, heure" au lieu de l'anglais "mois jour heure année".

0voto

Max Points 101

Si vous exécutez bash sur un mac, vous rencontrerez quelques difficultés en utilisant le paramètre at programme. Dans ce cas, vous pouvez améliorer la solution que vous avez proposée à l'origine,

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

avec ça,

nohup bash -c "sleep $(echo '8 * 60 * 60' | bc) ; ./mycommand.sh" &

qui est une forme plus lisible du temps que vous voulez attendre. Dans cet exemple 8 est le nombre d'heures que vous souhaitez attendre avant d'exécuter votre script. mycommand.sh .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X