web-dev-qa-db-fra.com

L'exécution d'un script shell avec un travail cron pose des problèmes, pas manuellement. Des idées?

J'ai créé un script Shell appelé /home/root/cron_grads.sh (chmodded 755) sur mon serveur.

Dans ce répertoire, il y a plus de scripts de graduation comme 500hPa_p0.gs (644). Mon script principal crée un fichier temporaire grads_exec.gs, le remplit de contenu et essaie ensuite de copier le contenu de 500hPa_p0.gs à la fin de celui-ci avant d'exécuter le tout. Cela fonctionne très bien, même sur le serveur si je le démarre manuellement.

Mais en utilisant crontab -e avec:

42 0,6,12,18 * * * /home/root/grads/cron_grads.sh

... une erreur se produit. Le script démarre mais les diplômés disent:

cat: 500hPa_p0.gs: File or directory not found

J'utilise bash dans cron_grads.sh avec #!/bin/bash en haut. crontab -e contient également Shell=/bin/bash.

Des idées?

1
Dre

Il s'agit d'un problème dans votre cron_grads.sh script. Lorsque vous l'appelez manuellement, je suppose que vous êtes dans /home/root donc il exécuterait quelque chose comme:

echo test > grads_exec.gs
cat 500hPa_p0.gs >> grads_exec.gs

Mais si vous avez exécuté cela depuis /home/oli/, il tenterait d'écrire dans /home/oli/grads_exec.gs et lire à partir de /home/oli/500hPa_p0.gs. Voilà pourquoi le chat explose dans votre cas.

Pour corriger, soit explicitement cd dans le bon répertoire (et utilisez un chemin absolu):

cd /home/root
echo test > grads_exec.gs
cat 500hPa_p0.gs >> grads_exec.gs

Ou utilisez des chemins absolus partout:

echo test > /home/root/grads_exec.gs
cat /home/root/500hPa_p0.gs >> /home/root/grads_exec.gs

Ou pour des raisons de sécurité, les deux.

0
Oli
0
laugeo