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?

user333746
la source

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 ).

Gilles 'SO- arrête d'être méchant'
la source
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