J'ai un script test.sh
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
lorsque j'exécute le fichier en tant que root à partir de la ligne de commande, cela fonctionne.
sh /home/v/test.sh
quand je le mets à crontab -e (est le cron racine), ne fonctionne pas
* * * * * sh /home/v/test.sh
Qu'est-ce que je fais mal? Merci
Réponses:
Selon l'homme:
Donc, le démon cron ne sait pas où est php et vous devez spécifier le chemin php complet à la main, par exemple (je ne connais pas votre vrai chemin PHP):
Une autre façon est de trouver le profil / etc / (ou votre .profile / .bashrc), par exemple
Ceci est utile si votre .bashrc définit les variables d'environnement dont vous avez besoin (par exemple PATH)
ÉDITER
Une lecture intéressante est " Newbie: Intro to cron ", ne sous-estimez pas l'article du titre (c'est une lecture pour tout le monde), en fait c'est bien écrit complet et répond parfaitement à votre question:
la source
Il existe quatre causes courantes pour lesquelles les commandes fonctionnent lorsqu'elles sont saisies dans un terminal mais pas à partir de cron, par ordre de commun:
$PATH
et d'autres variables attendues manquantes.Si votre travail produit une sortie, y compris des messages d'erreur, cron vous envoie un e-mail avec la sortie entière. Assurez-vous de lire le courrier que vous recevez localement ou de le transférer à une adresse que vous lisez. Pour transférer le courrier d'un compte local vers une autre adresse, entrez l'autre adresse
~/.forward
. Si la tâche cron est en cours d' exécution en tant qu'utilisateur du système (root
,webmaster
, ...), assurez - vous que le courrier de l' utilisateur est redirigé vers vous (et tout autre administrateur); avec la plupart des configurations de messagerie, mettez des lignes commeroot: elzo
dans/etc/aliases
.la source
Le démon cron exécute généralement votre commande dans un shell où la variable d'environnement PATH est limitée à une valeur par défaut du système, par exemple / usr / bin: / bin.
Probablement, votre
php
commande n'est pas disponible dans / usr / bin ou / bin et donc le script échoue lorsqu'il est exécuté via cron et s'exécute avec succès dans le cas contraire.Cron signale généralement des erreurs ou des messages de travail via un courrier électronique à l'utilisateur root (c'est-à-dire lorsqu'une commande renvoie un état de sortie! = 0 ou produit une sortie vers stdout / stderr) une fois le travail terminé.
Selon votre système, vous devez configurer la distribution du courrier local pour obtenir ces messages.
la source