Crontab - Exécuter dans le répertoire


170

Je voudrais définir un travail à exécuter quotidiennement dans le crontab racine. Mais j'aimerais qu'il l'exécute à partir d'un répertoire particulier afin qu'il puisse trouver tous les fichiers dont il a besoin, car l'application a un tas de chemins relatifs.

Quoi qu'il en soit, puis-je dire à crontab de s'exécuter à partir d'un répertoire particulier?

Réponses:


318

Tous les travaux sont exécutés par un shell, alors démarrez cet extrait de shell par une commande pour changer de répertoire.

cd /path/to/directory && ./bin/myapp

Concernant l'utilisation de &&au lieu de ;: normalement cela ne fait aucune différence, mais si la cdcommande échoue (par exemple parce que le répertoire n'existe pas) avec &&l'application n'est pas exécutée, alors qu'avec ;elle est exécutée (mais pas dans le répertoire prévu ).


Plutôt que d'ajouter une réponse principalement dupliquée, laissez-moi simplement ajouter que vous pouvez choisir quel shell (si vous avez besoin de bash plutôt que de sh, par exemple) en définissant SHELLdans votre crontab.
— Edd Steel

12
+1. La solution de toute autre question connexe consiste à réécrire le script avec des chemins absolus. c'est exactement ce dont j'avais besoin
— Conrad.Dean

2
Par curiosité, pourriez-vous utiliser un point-virgule ;au lieu de la double esperluette &&ou cela ne fonctionnerait-il pas? Et pourquoi?
— Joshua Pinter

32
@JoshPinter Normalement, cela ne fait aucune différence. Mais si la cdcommande échoue (par exemple parce que le répertoire n'existe pas), avec &&, l'application n'est pas exécutée. Avec ;, il est exécuté (mais pas dans le répertoire prévu).
— Gilles 'SO- arrête d'être diabolique'

1
Je vais faire cela pour tous les travaux cron de mes applications, vous m'avez évité de changer mes fichiers source, merci beaucoup
— Comptable du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.