2010-10-08 7 views
6

Ho diversi file PHP che devono essere eseguiti da cron. Ho creato la cron usando comandamentiCron in esecuzione ma la funzionalità non funziona

crontab crontab.txt 

comandi cron All'interno del file crontab.txt, ho scritto in questo modo: -

#(Updating tutor activities) - every minute 
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php 

Ma nessuna delle funzionalità stiamo lavorando (query di database, l'invio mail di sollecito ecc.). L'esecuzione manuale degli URL funziona.

Quindi ho inserito il mio indirizzo e-mail in MAILTO e ricevuto la posta. Nella posta, ho ricevuto l'intera fonte HTML della pagina. Cosa è previsto nella posta? Perché le mie funzionalità non funzionano?

Aggiornamenti
Se cambio i miei comandi cron per

#(Updating tutor activities) - every minute 
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

Ancora senza successo, e questo entra in gioco la mia mail -

--15:03:01-- http://project/cron/tutor_activities.php 
      => `tutor_activities.php' 
Resolving project... IP Address 
Connecting to test.project|IP Address|:80... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently 
Location: http://project./ [following] 
--15:03:01-- http://project./ 
      => `index.html.1' 
Resolving project.... IP Address 
Connecting to project.|IP Address|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: http://project/home/ [following] 
--15:03:01-- http://project/home/ 
      => `index.html.1' 
Resolving project... IP Address 
Connecting to wproject|IP Address|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 
index.html.1 has sprung into existence. 
Retrying. 

E un sacco di index.html.1, index.html.2 file stanno accumulando in la radice del mio progetto. Non voglio che questi file vengano creati. Voglio solo che i file vengano eseguiti.

stessi risultati se io uso uno dei due comandi -

* * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

    * * * * * wget http://project/cron/tutor_activities.php 

esecuzione php comando con MAILTO set manda me questo errore/bin/sh: php: comando non trovato.

* * * * * php /path/to/test.php 

Quindi, io non sono in grado di utilizzare php comando.

Ho scritto un semplice mailto() all'interno del mio test.php. La posta non arriva quando si esegue cron (utilizzando sia wget che php non riesce) ma l'esecuzione manuale dell'URL funziona.

Il mio problema
Per renderlo ancora chiaro, il mio problema principale è che la funzionalità all'interno dei file cron non è in esecuzione. La creazione di file è un problema secondario.

Qualsiasi aiuto sarebbe apprezzato

Grazie,
Sandeepan

+0

Non è necessario accedere al sistema Web per eseguire queste query, inviare posta, ecc., Vero? –

+0

Ho trovato la soluzione da solo. Accetto che i dettagli della mia domanda non siano stati sufficienti per indovinare la vera ragione. Ma, questo era il problema. Ma grazie a tutti per i vostri sforzi. Non sto offrendo manualmente taglie a nessuno. Lascia che i voti decidano la taglia. –

risposta

1

Ho trovato il problema da solo. Non ho inserito lo stesso URL nel mio file crontab che stavo eseguendo manualmente e quello è stato un mio errore.

Durante l'esecuzione manuale stavo semplicemente digitando test nell'URL, l'elenco dei miei URL salvati è stato visualizzato e stavo selezionando l'URL http://www.test.project.com/cron/tutor_activities.php, ma nel file crontab avevo messo http://test.project.com/cron/tutor_activities.php. Mi è stato erroneamente assumendo questo correrebbe http://www.test.project.com/cron/tutor_activities.php (perché abbiamo una regola di riscrittura presenti aggiungere www)

Ma la regola di riscrittura è stato orientarli verso http://www.test.project.com/home. Ecco perché il contenuto HTML nella posta.

Quindi, la cosa più importante da imparare qui è assicurarci di non perdere le cose minute e non dare per scontato che abbiamo fatto tutto correttamente. Nel mio caso, è meglio copiare e incollare l'URL funzionante nel file cron.

7

se si desidera chiamare un URL, cronjob, dovrete usare somthing come wget. se si tratta di uno script PHP sul server sarebbe più facile da usare php /...pathtomyscript.../cron/tutor_activities.php

+0

@oezi, grazie per la risposta, sto già usando wget e la parte '-O - -q -t' nel mio wget è per non emettere file per quanto mi ricordo. Si prega di controllare il mio aggiornamento. Se rimuovo '-O - -q -t' ogni cron run crea un file. Non lo voglio –

+0

potresti provare a fare "wget ​​myurl>/dev/null" (o qualcosa di simile, non conosco la sintassi esatta) che farebbe un "normale" wget senza parametri opzionali e "memorizzerà" l'autput su/dev/null – oezi

+0

@oezi che esegue '* * * * * php/path/to/test.php' con' MAILTO' set mi invia questo errore '/ bin/sh: php: comando non trovato'. Ho scritto un semplice 'mail()' nel mio test.php. La posta non arriva quando si esegue cron (usando sia wget che php) ma l'esecuzione manuale dell'URL funziona. –

1

Quando si chiama wget con -O -, invierà il contenuto scaricato sullo standard output, che cron sta inviando a voi tramite il messaggio di posta elettronica . Nel primo caso, sta facendo esattamente quello che dovrebbe.

Quando si chiama wget senza il parametro -O, si tenterà di salvare il contenuto scaricato come un file con lo stesso nome della pagina Web scaricata. Se esiste, aggiungerà l'incrementatore al nome, come hai visto. In questo secondo caso, sta facendo esattamente quello che dovrebbe.

Non è chiaro dalla domanda in cui si desidera che l'output vada, ma se si desidera salvare l'output nello stesso file ogni volta, utilizzare -O myfilename.html.

+0

Non voglio che questi file vengano creati. Voglio solo che i file vengano eseguiti e producano i risultati. Ma dal momento che i risultati non arrivano (modifiche al database, mail non in corso). –

+0

OK, la maggior parte della tua domanda riguardava l'output di wget, non era chiaro che non ti interessasse nemmeno. Procederei sicuramente aggiungendo il debug di registrazione sul lato server a tutor_activities.php. Se viene chiamato, chiamarlo da wget in entrambi i casi non dovrebbe avere importanza. –

1

Se il PHP in esecuzione dalla linea di comando/cron assicuratevi di mettere il percorso completo del file eseguibile php

1

'del tutto possibile che il PHP non è nel percorso all'interno dell'ambiente cron - non è assolutamente intenzione di avere lo stesso configurazione come shell normale. Provare a utilizzare il percorso assoluto sia per l'interprete php e lo script php nel comando cron:

* * * * * /path/to/php /path/to/test.php 

Per quanto riguarda la creazione di file, è sufficiente aggiungere un reindirizzamento al comando wget:

wget -O - ... http://....  > /dev/null 

-O - forze wget per scrivere tutto ciò che scarica sullo standard output, che cron sarà felicemente e-mail a voi. Aggiungendo lo > /dev/null alla fine del comando, questo output andrà invece a Great Bitbucket in the Sky. Se non vuoi che l'output di wget stderr sia inviato via email, puoi anche aggiungere uno 2&>1 dopo lo /dev/null, che reindirizza ulteriormente stderr a stdout, che ora va a/dev/null.

+0

+1. Usa 'quale php' per scoprire il percorso completo dell'eseguibile PHP. –

0

An (nessun file TMP) modo facile e sicuro per farlo è quello di utilizzare processo di sostituzione di bash:

* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)" 

sostituzione di processo esegue il comando all'interno <() e mette l'output in un oggetto di file che è visibile solo dal processo attuale. Per usarlo da cron, invoca direttamente bash e passalo come stringa di comando.

E come altri hanno menzionato, utilizzare il percorso completo per php che è possibile trovare con which php.

7

provare

che php

Il percorso che viene restituito deve essere posto con il comando che viene passato per eseguire il Cron file.If si sta configurando il Cron attraverso Shell, è non darà alcun problema, ma per essere sicuro, prova a dare un percorso assoluto quando stai cercando di eseguire una pagina php.

/path/to/php/path/to/cron/script/

cercare di dare il vostro COMAND in questo modo, se il problema persiste, si sentono liberi di discutere.

Problemi correlati