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" ?
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" ?
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
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 :
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 :
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".
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
.
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.