Quel est un moyen simple d'exécuter une commande, disons 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"?
Quel est un moyen simple d'exécuter une commande, disons 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"?
Réponses:
Vous pouvez utiliser la at
commande. Les at
commandes à exécuter ultérieurement. L' at
utilitaire doit lire les commandes à partir de l'entrée standard et les regrouper en une tâche à exécuter ultérieurement.
Habituellement, il at
est installé par défaut dans Ubuntu, mais si votre version ne l’inclut pas, installez-la via:
sudo apt-get install at
Pour plus d'informations, options, exemples et autres, voir le référentiel de pages de manuel Ubuntu.
Exemple:
at now +8 hours -f ~/myscript.sh
Vous pouvez également utiliser des raccourcis pratiques, comme tomorrow
ou noon
, comme dans
echo "tweet fore" | at teatime
Avertissement: Ceci lancera immédiatement la commande située à gauche du tuyau,mais ne présentera sa sortie que plus tard. L'exemple montre également comment vous pouvez diriger des actions dansat
. at -c
C’est ainsi que vous pouvez examiner les actions planifiées, que vous pouvez facilement lister avec leur numéro, comme avec:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
exécuter la commande à une heure absolue, et batch
pour "quand on dirait que l'ordinateur est en veille"
teatime
est à 16 heures. 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 .
gpio write 8 1
mais il s'est exécuté immédiatement.
Oui, vous pouvez définir un travail cron.
Par exemple, si le temps est 14h39:00 et que nous sommes le vendredi 30 août, vous pouvez ajouter le travail cron suivant (à exécuter après 8 heures) dans votre fichier crontab à l'aide de la crontab -e
commande:
39 22 30 8 5 /path/to/mycommand.sh
Plus à propos:
crontab
jusqu'à ce que vous la supprimiez. Un an plus tard, une fois que vous avez oublié qui l'a mis là et pourquoi, il vous restera à vous gratter la tête et à vous demander quoi faire avec cette commande.
Utilisez l'interface graphique basée sur Gnome pour cron
, at
etc.:
L'introduction de CronHowto suggère d'utiliser l' interface graphiquegnome-schedule
, ce qui est beaucoup plus pratique que de taper toutes les ordures dans le terminal (en particulier pour les utilisateurs "moyens" d'Ubuntu qui ne sont pas des utilisateurs "puissants" * nix / bsd.)
Exécutez-le à l'aide du tableau de bord Unity (ou d'un autre menu d'applications) pour rechercher des tâches planifiées ou en cours d'exécution gnome-schedule
.
Sur les systèmes Ubuntu basés sur Gnome, l'outil Tâches planifiées Gnome (du paquet gnome-schedule) dans Applications -> Outils système fournit une interface graphique avec une invite à utiliser Cron. Le site Web du projet est à l’adresse http://gnome-schedule.sourceforge.net/ ; le logiciel est installable à partir du centre logiciel ou en tapant
sudo apt-get install gnome-schedule
dans un terminal.
En utilisant gnome-schedule
, pour un script de votre répertoire personnel, une nouvelle commande "at" serait configurée en utilisant ce type de fenêtre:
J'ai trouvé un moyen rapide et sale de faire cela avant de découvrir que at
c'était une chose.
Supposons que votre script soit exécuté à midi:
until [[ "$(date)" =~ "12:00:" ]]; do
sleep 10
done
./mycommand.sh
Supposons que vous souhaitiez le lancer demain midi (aujourd'hui, le 24 novembre):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Mise à jour : méthode légèrement meilleure: testez uniquement les chiffres qui vous intéressent, en utilisant date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
ou toute autre application de planificateur réel. La planification des tâches est difficile et vous ne devez pas réinventer une roue.
at
.
at
est que ses travaux survivront à un redémarrage.
nohup
+sleep
? Pourquoi est-ce "impropre"?