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?
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.
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
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
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
Vous pouvez utiliser la commande wget localement:
5 * * * * wget http://localhost/some/path/script.php
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.