J'ai un fichier texte contenant une date et une heure spécifiques. Je veux être capable de exécuter un script à l'heure spécifiée dans ce fichier. Comment y arriveriez-vous? Créez un autre script qui s'exécute en arrière-plan (une sorte de démon) et vérifie toutes les secondes si l'heure actuelle correspond à l'heure du fichier? Y a-t-il un autre moyen? La machine est un serveur linux, Debian Wheezy. Merci d'avance
Regardez ce qui suit:
echo "ls -l" | at 07:00
Cette ligne de code exécute "ls -l" à un moment précis. Ceci est un exemple d'exécution de quelque chose (une commande dans mon exemple) à un moment précis. "at" est la commande que vous cherchiez vraiment. Vous pouvez lire les spécifications ici:
http://manpages.ubuntu.com/manpages/precise/fr/man1/at.1posix.htmlhttp://manpages.ubuntu.com/manpages/xenial/man1/ at.1posix.html
J'espère que ça aide!
La commande at
existe spécifiquement à cette fin (contrairement à cron
qui est destiné à la planification de tâches récurrentes).
at $(cat file) </path/to/script
Cron est bon pour quelque chose qui fonctionnera périodiquement, comme tous les samedis à 4h. Il y a aussi anacron, qui fonctionne autour des coupures de courant, des mises en veille et ainsi de suite. Ainsi que at.
Mais pour une solution ponctuelle, qui ne nécessite pas de racine ou quoi que ce soit, vous pouvez simplement utiliser date pour calculer le nombre de secondes écoulées depuis l'heure cible ainsi que l'heure actuelle, puis utilisez expr pour trouver la différence, et sommeil autant de secondes.
Habituellement, sous Linux, vous utilisez crontab
pour ce type de tâches planifiées. Mais vous devez spécifier l'heure à laquelle vous "configurez le minuteur". Si vous souhaitez que ce soit configurable dans le fichier lui-même, vous devrez créer un mécanisme pour le faire.
Mais en général, vous utiliseriez par exemple:
30 1 * * 5 /path/to/script/script.sh
Exécuterait le script chaque vendredi à 1h30 du matin. Ici:
30
est minutes
1
est l'heure
les 2 * suivants sont day of month
et month
(dans cet ordre) et 5
est le jour de la semaine.