Exécuter php avec crontab

j'essaye d'exécuter un script php sur une base programmée. Alors j'ai pensé que crontab était une bonne idée. Le serveur que j'utilise est sous Linux et je ne le connais pas très bien. Le problème que j'ai, c'est que je ne sais pas comment rendre le script exécutable à partir de php. Je dois référencer le script, ou le mettre dans un dossier qui peut exécuter php à partir de la ligne de commande. Donc je ne sais pas quel chemin donner à mon 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 là-dedans, peut-être que je ne l'ai pas installé? Mon installation php5 et apache est en:

/etc/php5

alors ma question devient, Est - ce qu'il y a de toute façon d'exécuter un script php avec crontab dans n'importe quel autre dossier, ou est-ce que je manque juste l'exécutable php dans usr/bin/php?

19
demandé sur Stefan Konno 2010-04-22 12:34:53

6 réponses

commencez par taper en ligne de commande:

whereis php

faites ceci en tant qu'utilisateur sous lequel le travail cron sera exécuté. Ceci vous montrera le chemin vers votre exécutable. Vous pouvez alors utiliser ce chemin (s'il n'est 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 php5-cli (nom du paquet Ubuntu) paquet si tout ce que vous avez est le module Apache PHP installé. Cela vous donnera la binaire exécutable que vous pouvez exécuter à partir d'une ligne de commande.

29
répondu richsage 2010-04-22 08:40:44

Est-ce un système Linux?

dans les distributions Linux plus récentes, il y a

en fait, un système crontab-setup convienient

cela ne nécessite aucune entrée dans la crontab par l'utilisateur. Par exemple, 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 (chmod 755) contient:

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

et redémarrez le démon cron. Thats it.

à partir du logfile, vous verrez si votre interpréteur php

se trouve dans le CHEMIN d'accès. Sinon, modifiez la ligne dans /etc/cron.horaire/konno_php_start

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

Cordialement

rbo

5
répondu rubber boots 2010-04-22 08:47:37

je devais trouver une piste 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 vers l'exécutable php comme suit:

andy@ararat:~$crontab -e
#*/1 * * * * /usr/bin/php5 /home/andy/www/dev.com/corp_rewards_cron.php
5
répondu techjacker 2011-09-22 09:08:41

vous pouvez aussi utiliser env, il va trouver et lancer 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

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

5  * * * * /var/www/some/path/script.php
2
répondu Victor Stanciu 2010-04-22 09:06:43

Vous pouvez utiliser la commande wget localement:

5  * * * * wget http://localhost/some/path/script.php
1
répondu Etienne Martin 2015-10-30 03:21:32

je vous suggère de faire comme ceci,

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

où en vous .code pl vous devriez grep en utilisant wget ou quelque chose comme ceci:

wget "/www/root/index.php"

ou tu peux faire comme ceci:

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

c'est juste ma suggestion, j'ai seulement essayé wget au site externe pas localement et il fonctionne.

veuillez essayer de revenir en arrière.

0
répondu Nazmin 2010-04-22 09:14:32