2010-04-22 16 views
19

Sto provando a eseguire uno script php su base pianificata. Quindi pensavo che crontab fosse una buona idea. Il server che sto usando è su Linux che non mi è familiare. Quindi il problema che sto avendo è, non so come rendere lo script eseguibile da php. Ho bisogno di fare riferimento allo script, o metterlo in una cartella in grado di eseguire php dalla riga di comando. Quindi non so quale strada dare il mio crontab, ad esempio:Esecuzione di php con crontab

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

ho trovato alcune informazioni vaghe su questo eseguibile php apparso in

/usr/bin/php 

Ma non riesco a trovare alcuna php file in là, forse non ce l'ho installato? Il mio php5 e apache installazione è in:

/etc/php5 

Quindi la mia domanda diventa, c'è comunque di eseguire uno script PHP con crontab in qualsiasi altra cartella, o devo solo manca l'eseguibile php in usr/bin/php ?

+1

Stefan, quale distribuzione Linux è questo? Hai installato i pacchetti "regolari" di Apache/PHP o usi "Apachefriends" o il pacchetto simile? –

+0

Il solito Apache/PHP. Il mio phpinfo(); ha detto Server Api: Apache 2.0 Handler. –

risposta

29

Inizia digitando in una riga di comando:

whereis php

fare questo, come l'utente che il processo di cron verrà eseguito sotto. Questo ti mostrerà il percorso verso il tuo eseguibile. È quindi possibile utilizzare quel percorso (se non è già presente nella variabile PATH) nella voce di cron:

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

Edit: potrebbe essere necessario installare il (Ubuntu nome del pacchetto) php5-cli pacchetto, se tutto quello che è installato il modulo Apache PHP. Questo ti darà l'eseguibile binario che puoi eseguire da una riga di comando.

+5

Puoi anche usare "quale php" nella linea di comando –

+0

dove php mi ha dato la risposta "php:" Non molto informativo. Potrei dover prendere in considerazione l'idea di installare quel pacchetto. Ho letto qualcosa sull'esecuzione di crontab via Lynx per qualche ragione se il tuo php è stato installato in modalità Apache e non in CGI. Il mio phpinfo(); ha detto Server Api: Apache 2.0 Handler –

+1

Il recupero di "php:" da solo significa che l'eseguibile non è stato trovato - quindi potrebbe essere necessario installare il pacchetto per ottenerlo. – richsage

5

Si tratta di un sistema Linux?

In più recenti distribuzioni Linux, c'è
in realtà un sistema crontab-setup convienient
che non richiede alcuna voce nella crontab dall'utente. esempio in SuSE Linux, avete directory

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

Basta mettere uno script di invocazione (konno_php_start) in una di queste directory, come

/etc/cron.hourly/konno_php_start 

che è eseguibile (chmod 755 o giù di lì) e contiene:

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

e riavviare il demone cron. Questo è tutto.

Dal file di registro, vedrete se il vostro interprete php
sarà trovato nel PERCORSO. In caso contrario, modificare la riga in/etc/cron.oraria/konno_php_start a

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

saluti

rbo

+0

Come si riavvia il demone cron? –

+0

SuSE: (come root) "rccron restart" simile a Slackware: /etc/init.d/cron restart altri: (google) –

+0

start-stop-daemon: avviso: impossibile uccidere 5097: Operazione non consentita . ..fallire! è quello che ho ottenuto, ma non sono attualmente loggato come root. Devo essere root per modificare anche il crontab. Scusa se ti sto facendo domande stupide, sono un po 'nuovo per l'intera faccenda del server. –

2

È inoltre possibile utilizzare env, troverà e lanciare php per voi:

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

Oppure si può mettere uno shebang nel tuo script.php (prima riga):

#!/usr/bin/env php 

poi renderlo eseguibile, e rendere crontab chiamano direttamente, come nel vostro primo esempio:

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

Scrivo questo nel crontab? –

+0

Sì, invece del comando iniziale. –

0

io suggerisco di fare in questo modo,

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

dove in voi .PL codice si dovrebbe grep utilizzando wget o qualcosa di simile:

wget "/www/root/index.php" 

oppure si può semplicemente fare come questo:

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

E 'solo il mio suggerimento, ho solo cercare wget al sito esterno non a livello locale e funziona.

si prega di provare e ripristinare.

+0

puoi anche usare come file .sh, le stesse cose ... – Nazmin

+0

breve per STDOUT è '>/dev/null 2> & 1' invece di' 1>/dev/null 2>/dev/null' – vladkras

5

ho dovuto trovare a seguire una pista per trovare il file eseguibile:

[email protected]:~$ type php 
php is /usr/bin/php 

[email protected]:~$ file /usr/bin/php 
/usr/bin/php: symbolic link to `/etc/alternatives/php' 

[email protected]:~$ file /etc/alternatives/php 
/etc/alternatives/php: symbolic link to `/usr/bin/php5' 

[email protected]:~$ 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 

quindi è necessario includere/usr/bin/PHP5 come il percorso del file eseguibile php in questo modo:

[email protected]:~$crontab -e 
#*/1 * * * * /usr/bin/php5 /home/andy/www/dev.com/corp_rewards_cron.php 
0

è possibile utilizzare il comando wget localmente:

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