web-dev-qa-db-fra.com

Comment exécuter un script à un moment donné sur Linux?

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

72
Aaron Ullal

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!

135
Antoni

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
14
tripleee

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.

7
Anony

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.

6
julumme