linux: comment exécuter une commande dans un répertoire donné

16

Je veux simplement exécuter une commande (c'est en fait un script shell) à partir d'un répertoire donné en tant que tâche cron. Comment puis-je l'exécuter pour qu'il soit défini sur un répertoire donné sans utiliser cd.

Des morts-vivants
la source

Réponses:

16

Votre question a peu de sens. Utilisez cd. Si vous demandez que la réponse ne soit pas utilisée cdparce que vous l'avez essayée et que cela n'a pas fonctionné, il est probable que vous ne l'ayez pas entrée correctement dans la crontab.

Le moyen le plus simple serait d'écrire un petit script shell qui sera cd et exécutera votre tâche principale, puis cron le script.

Daenyth
la source
1
Crontab peut-il me laisser mettre plusieurs commandes dans un même travail? Sinon, je devrais coder le cd [chemin]. Et le chemin pourrait changer, causant ainsi des problèmes de déploiement vraiment ennuyeux et décentralisant la configuration, ce que j’évite à tout prix.
Zombies
1
@Zombies: oui, vous pouvez insérer plusieurs commandes dans un même travail (par exemple, en les séparant par des points-virgules ou &&), mais vous pouvez également écrire un script séparé contenant toutes les commandes et simplement mettre le chemin d'accès au script dans cron, comme suggéré par Daenyth. Votre script pourrait faire quelque chose de similaire à la lecture du répertoire à partir d’un fichier de configuration si vous le souhaitez. L’important, c’est que quel que soit le nom de votre répertoire, ce n’est pas une excuse pour ne pas l’utiliser cd.
David Z
Je vois. Je vais vouloir utiliser cd directement sur la crontab car si je l'écris dans un fichier, je devrai l'éditer dans chaque fichier, ce qui rend les configurations délicates / faciles à décomposer.
Zombies
3
Et si vous mettez le cd dans le fichier crontab, vous devrez le modifier dans chaque fichier crontab. Je ne comprends pas le problème. Peut-être pourriez-vous expliquer davantage ce que vous essayez de faire.
garyjohn
L'autre raison d'exécuter un script shell à partir du fichier crontab est de s'assurer que l'environnement est correctement défini. L'environnement donné à un travail cron est normalement à peine, voire minime, vous devez donc le réinitialiser à quelque chose de plus utilisable.
Jonathan Leffler
57

Il suffit de spécifier le chemin d'accès au script. Pas besoin de cd:

0 12 * * * /path/to/script args

Si votre script recherche des fichiers ., vous devrez alors utiliser cd:

0 12 * * * cd /some/dir && /path/to/script args
Dennis Williamson
la source
2
Voir aussi serverfault.com/questions/290313/…
Will Sheppard
4
&&, comme dans la réponse à laquelle @WillSheppard renvoie, serait préférable, ;car elle n'exécute &&la commande suivante que si la commande précédente a abouti.
Max Heiber
1
@mheiber: corrigé
Dennis Williamson