Domanda

Ho diversi file PHP per essere gestiti da cron. Ho creato la cron usando il comando -

crontab crontab.txt

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

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

Ma nessuno dei funzionalità stanno lavorando (query di database, l'invio di mail di promemoria, ecc). Esecuzione gli URL funziona manualmente.

Poi ho messo il mio indirizzo di posta elettronica in MAILTO e ricevuto la posta. Nella mail, ho ricevuto tutto il sorgente HTML della pagina. Cosa ci si aspetta per posta? Perché i miei funzionalità che non funziona?

Aggiornamenti
Se cambio il mio cron comandi 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, file index.html.2 stanno accumulando nella radice del mio progetto. Non voglio questi file da creare. Voglio solo i file da eseguire.

Gli stessi risultati se uso uno dei due comandi -

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

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

mi comando php correre con set MAILTO invia questo errore / bin / sh: php: comando non trovato.

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

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

Ho scritto un semplice mailto() dentro la mia test.php. La posta non arriva quando si esegue attraverso cron (utilizzando sia wget e php fallisce), ma in esecuzione l'URL manualmente funziona.

Il mio problema
Per chiarire ancora una volta, il mio problema principale è che la funzionalità all'interno dei file cron non è in esecuzione. Creazione di file è un problema secondario.

Qualsiasi aiuto sarebbe apprezzato

Grazie,
Sandeepan

È stato utile?

Soluzione 6

Ho trovato il problema io stesso. Non ho messo lo stesso URL nel mio file crontab che stavo correndo manualmente e che è stato il mio errore.

Durante l'esecuzione manualmente stavo scrivendo test nella URL, elenco di URL salvati dei miei browser appariva e mi stava selezionando il http://www.test.project.com/cron/tutor_activities.php URL, ma nel file crontab mi aveva 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. È per questo che il contenuto HTML nella mail.

Quindi, la cosa più importante da imparare qui è quello di assicurarsi che non perdere le cose minuto e non ci assumiamo che abbiamo fatto tutto correttamente. Nel mio caso, meglio copiare e incollare l'URL di lavoro nel file cron.

Altri suggerimenti

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

try

  

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 la Shell, che non darà alcun problema, ma per essere tranquilli, provare a dare percorso assoluto quando si sta cercando di eseguire una pagina PHP.

  

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

Prova a dare il vostro COMAND come questo, se i persiste problema;. Sentitevi liberi di discutere

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, che sta facendo esattamente quello che dovrebbe.

Quando si chiama wget witout la -O parametro, cercherà di salvare il contenuto scaricato come un file con lo stesso nome della pagina web in fase di download. Se esiste, si aggiungerà l'incrementatore al nome, come avete visto. In questo secondo caso, che sta facendo esattamente quello che dovrebbe.

Non è chiaro dalla tua domanda in cui si desidera l'uscita per andare, ma se si vuole salvare l'output allo stesso file ogni volta, l'uso -O myfilename.html .

Se la vostra esecuzione di PHP da linea di comando / cron assicuratevi di mettere il percorso completo del file eseguibile php

E 'del tutto possibile che il PHP non è nel percorso all'interno dell'ambiente cron - non è assolutamente intenzione di avere la stessa configurazione come shell regolare. 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, devi solo aggiungere un reindirizzamento al comando wget:

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

forze -O - wget per nulla scrittura si scarica sullo standard output, che cron poi felicemente la posta elettronica voi. Aggiungendo la > /dev/null alla fine del comando, questa uscita sarà invece andare il Grande Bitbucket nel cielo. Se non si desidera che l'uscita stderr di wget inviato via email o, è anche possibile aggiungere un 2&>1 dopo la /dev/null, che ha ulteriormente redirect stderr allo stdout, che è ora di andare a / dev / null.

Un facile e sicuro (nessun file TMP) modo per farlo è quello di sostituzione di processo l'uso di bash:

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

La sostituzione di processo esegue il comando all'interno <() e mette l'output in un file oggetto che è visibile solo dal processo corrente. Per poter utilizzare da cron, invocare bash direttamente e passarlo come una stringa di comando.

E, come altri hanno detto, utilizzare il percorso completo per PHP che si può scoprire con which php.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top