web-dev-qa-db-fra.com

Exécuter php avec crontab

J'essaie d'exécuter un script php sur une base programmée. J'ai donc pensé que crontab était une bonne idée. Le serveur que j'utilise est sous Linux avec lequel je ne suis pas familier. Donc, le problème que je rencontre est, je ne sais pas comment rendre le script exécutable à partir de php. Je dois référencer le script, ou le placer dans un dossier pouvant exécuter php à partir de la ligne de commande. Donc, je ne sais pas quel chemin donner à ma crontab, par exemple:

5  * * * * var/www/some/path/script.php

J'ai trouvé des informations vagues sur cet exécutable php trouvé dans 

/usr/bin/php

Mais je ne trouve aucun fichier php, peut-être que je ne l’ai pas installé? Mon installation de php5 et Apache est dans:

/etc/php5

Ma question est donc la suivante: est-il possible d'exécuter un script php avec crontab dans un autre dossier, ou est-ce qu'il me manque simplement l'exécutable php dans usr/bin/php?

20
Stefan Konno

Commencez par taper sur une ligne de commande:

whereis php

Faites cela en tant qu'utilisateur sous lequel le travail cron sera exécuté. Cela vous montrera le chemin d'accès à votre exécutable. Vous pouvez ensuite utiliser ce chemin (s'il ne figure pas déjà dans votre variable PATH) dans votre entrée cron:

5 * * * * /your/path/to/php /var/www/some/path/script.php

Edit: vous devrez peut-être installer le paquet php5-cli (nom du paquet Ubuntu) si vous n'avez que le module Apache PHP installé. Cela vous donnera l'exécutable binaire que vous pouvez exécuter à partir d'une ligne de commande.

30
richsage

Est-ce un système Linux? 

Dans les nouvelles distributions Linux, il y a
en fait un système pratique crontab-setup
qui ne nécessite aucune entrée dans la crontabpar l'utilisateur . E.g dans SuSE Linux, vous avez des répertoires

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.monthly/
/etc/cron.weekly/

Il suffit de mettre un script d’invocation (konno_php_start) dans l’un de ces répertoires , Comme

/etc/cron.hourly/konno_php_start

qui est exécutable (environ 755 chmod) et contient:

#!/bin/sh
cd /var/www/some/path/
php  script.php >> logfile.txt 2>&1

et redémarrez le démon cron. C'est tout.

A partir du fichier de log, vous verrez si votre interprète php
sera trouvé dans le PATH. Sinon, changez la ligne Dans /etc/cron.hourly/konno_php_startto 

/full/path/to/php  script.php >> logfile.txt 2>&1

Cordialement

rbo

5
rubber boots

Je devais trouver pour suivre un sentier pour trouver l'exécutable:

andy@ararat:~$ type php
php is /usr/bin/php

andy@ararat:~$ file /usr/bin/php
/usr/bin/php: symbolic link to `/etc/alternatives/php'

andy@ararat:~$ file /etc/alternatives/php
/etc/alternatives/php: symbolic link to `/usr/bin/php5'

andy@ararat:~$ file /usr/bin/php5
/usr/bin/php5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

vous devez donc inclure/usr/bin/php5 comme chemin d'accès à l'exécutable php comme ceci:

andy@ararat:~$crontab -e
#*/1 * * * * /usr/bin/php5 /home/andy/www/dev.com/corp_rewards_cron.php
5
techjacker

Vous pouvez également utiliser env ​​ , il trouvera et lancera php pour vous:

/usr/bin/env php /var/www/some/path/script.php

Ou vous pouvez placer un Shebang dans votre script.php (première ligne):

#!/usr/bin/env php

puis rendez-le exécutable et faites l'appeler directement par crontab, comme dans votre premier exemple

5  * * * * /var/www/some/path/script.php
2
Victor Stanciu

Vous pouvez utiliser la commande wget localement:

5  * * * * wget http://localhost/some/path/script.php
1
Etienne Martin

Je vous suggère de faire comme ça,

*/5 * * * * /path/gridmon2.pl 1> /dev/null 2> /dev/null

où dans votre code .pl vous devriez utiliser greget ou quelque chose comme ceci:

wget "/www/root/index.php"

ou vous pouvez simplement faire comme ça:

/usr/bin/wget "/www/root/index.php"

C'est juste ma suggestion, je n'ai essayé que wget vers un site externe, pas localement et cela fonctionne.

s'il vous plaît essayez de revenir.

0
Nazrul Muhaimin