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.