2010-05-01 5 views
0

J'ai un travail cron qui exécute un script PHP toutes les cinq minutes; le script PHP exécute deux commandes bash à la fin du script. Je sais que le script est en cours d'exécution en raison d'un fichier journal auquel il est ajouté. Lorsque je lance le script PHP manuellement via le terminal Gnome d'Ubuntu, les deux commandes bash s'exécutent parfaitement; Cependant, lorsque le script PHP est déclenché via cron, les deux commandes bash ne sont pas exécutées. Des idées?Les commandes Bash ne sont pas exécutées lors d'un job cron - PHP

$command = 'notify-send "' . count($infoleakPosts) . ' New Posts."'; 
`$command`; 

$command = 'firefox http://example.com'; 
`$command`; 

*/1 * * * * php /home/andrew/grab.php USERNAME PASSWORD # JOB_ID_1 
+0

avez-vous essayé d'ajouter le chemin complet? – Cesar

+0

Vous voulez dire le chemin complet de notify-send et firefox? – basicxman

Répondre

2

En général, vos scripts cron vont être exécutés sous un compte utilisateur différent, et ont probablement un chemin d'environnement différent mis en place. Essayez de définir vos lignes de commande pour utiliser le chemin d'accès complet à la commande, c'est-à-dire. /path/to/notify-send "x New Posts".

Vous pouvez utiliser which notify-send à partir de votre terminal habituel pour obtenir le chemin à mettre dans votre script.

Vous pouvez également récupérer la sortie de votre commande pour faciliter le débogage. L'utilisation de l'opérateur backtick renvoie la sortie, de sorte que vous pouvez l'affecter à une variable et/ou la vider.

$output = `$command`; 
error_log($output); 
1

lorsque vous utilisez le script sous Cron vous ne disposez pas d'un téléscripteur de sortie ou les fenêtres X-DISPLAY env-var. Je soupçonne que les commandes sont en cours mais échouent.

+0

Ouais, j'avais besoin de le mettre à courir dans X. Merci! – basicxman

0

un commentaire sur la réponse ci-dessus à propos Cron: cron exécutera les commandes que l'utilisateur dont il est crontab. Donc, si vous configurez le crontab, il exécutera les commandes comme vous. Il exécute un ensemble légèrement différent de scripts de démarrage de shell à ceux que vous obtenez lorsque vous vous connectez - il sait qu'il n'a pas de tty et donc il n'exécute que le fichier ~/.bashrc et non l'ensemble des fichiers de profil. Vérifiez les pages de manuel pour cron et bash pour les détails

Questions connexes