Il file si trova su /home/dir/file_da_eseguire.php
Nella stessa dir del file ho creato un file cron.sh (permessi -rwxr-xr-
x) con questo contenuto:
#!/bin/sh
php /home/dir/file_da_eseguire.php
Poi ho inserito (crontab -e) la seguente riga nel crontab:
* * * * * /home/dir/cron.sh
...e mi aspettavo che ogni minuto venisse eseguito il mio file.
NIENTE!!!
Dove sbaglio?
Come posso risolvere?
Tnx
Prova cosě (tutto su una riga, direttamente nel crontab):
* * * * * /usr/bin/php /home/dir/file_da_eseguire.php &> /tmp/php_check.log
e vedi se scrive qualcosa.
Andrea
a parte che non vedo l'utilitą di passare da uno script bash per
eseguirne un altro(senza fare altro), potresti mettere in cron
direttamente l'esecuzione di quello php. Poi, ci sarebbe da vedere il
contentuto di quello php per capire meglio
> ...e mi aspettavo che ogni minuto venisse eseguito il mio file.
> NIENTE!!!
niente significa che non viene eseguito o che da un errore?
se lo esegui in questo modo non potrai mai saperlo, redirigi su file
stdout e stderr, forse ti dicono qualcosa
--
Web marketing & community management:
http://www.insistema.com/
Perchè speravo che così funzionasse!!
Ho provato da shell a scrivere:
php /home/dir/file_da_eseguire.php
e il file viene eseguito correttamente (all'interno del file php ci
sono un paio di include, una query e la funzione mail()).
E il crontab che non me lo esegue...
> niente significa che non viene eseguito o che da un errore?
Non riesco a vedere errori...
> se lo esegui in questo modo non potrai mai saperlo, redirigi su file
> stdout e stderr, forse ti dicono qualcosa
Mi puoi dare un paio di info in più su come vedere "il log" del
crontab? Come funzionano questi comandi?
certo che funziona così,sono metodi equivalenti, solo che se passi dal
bashfai inutilmente un giro piu' lungo
> Ho provato da shell a scrivere:
> php /home/dir/file_da_eseguire.php
>
> e il file viene eseguito correttamente (all'interno del file php ci
> sono un paio di include
attenzione agli include, potrebbe essere necessario usare path completi ai
file da includere
> E il crontab che non me lo esegue...
ripeto, sicuro che non te lo esegue?
>> niente significa che non viene eseguito o che da un errore?
> Non riesco a vedere errori...
lo so, non redirigi niente!
>
>> se lo esegui in questo modo non potrai mai saperlo, redirigi su file
>> stdout e stderr, forse ti dicono qualcosa
>
> Mi puoi dare un paio di info in più su come vedere "il log" del
> crontab? Come funzionano questi comandi?
non devi vedere il log del crontab, ma quello del tuo script, eseguilo con
php /home/dir/file_da_eseguire.php >/tmp/file_da_eseguire.log
2>/tmp/file_da_eseguire.err
e controlla il contenuto dei due file in /tmp
ps: invece di eseguire con php nomefile potresti eseguire solo nomefile
mettendo come prima riga #!/usr/bin/php o quel che è.
Allora... ho scritto dentro il crontab
* * * * * php /home/dir/file.php>/tmp/loggggg.txt
e non è successo nulla...!!
Scrivo questo
php /home/dir/file.php>/tmp/loggggg.txt
su shell e mi viene creato il file (e il contenuto è la corretta
esecuzione, apparentemente, di ciò che deve essere eseguito)
forse faresti meglio leggere "TUTTO" quello che ti scrive, hai lasciato
la parte che redirige lo stderr!
prima ti ho scritto:
php /home/dir/file_da_eseguire.php >/tmp/file_da_eseguire.log
2>/tmp/file_da_eseguire.err
non vedi quel "2>/tmp/file_da_eseguire.err" ?
ko, è alla riga sotto per colpa del news reader... ma insomma..
Ah... ehemmm... chiedo venia... ero (sono!!) in preda alla
disperazione...
Allora.. ho fatto come hai detto tu. A quanto pare il crontab qualcosa
prova a fare, perchè ora i due file sono stati scritti.
Il .ERR mi restituisce un Warnig:
---------------------------
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/
lib/php/20020429/php_mbstring.dll' - Cannot open "/usr/local/lib/
php/
20020429/php_mbstring.dll" in Unknown on line 0
---------------------------
Mentre il .LOG mi dice questo:
---------------------------
Warning: main(../include/nl_db.php): failed to open stream: No such
file or directory in /usr/home/dir/admin-nl/nl_invio_em
ail_crontab.php on line 2
Warning: main(): Failed opening '../include/nl_db.php' for inclusion
(include_path='.:') in /usr/home/dir/admin-nl/nl_invio
_email_crontab.php on line 2
Warning: main(../include/nl_funzioni.php): failed to open stream: No
such file or directory in /usr/home/dir/admin-nl/nl_in
vio_email_crontab.php on line 3
Warning: main(): Failed opening '../include/nl_funzioni.php' for
inclusion (include_path='.:') in /usr/home/dir/admin-nl/nl
_invio_email_crontab.php on line 3
Warning: mysql_query(): supplied argument is not a valid MySQL-Link
resource in /usr/home/dir/admin-nl/nl_invio_email_crontab.php on line
14
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL
result resource in /usr/home/dir/admin-nl/nl_invio_email_crontab.php
on line 15
Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in /usr/home/dir/admin-nl/nl_invio_email_crontab.php
on line 21
Non ci sono email da inviare
---------------------------
L'ultima frase viene scritta per via della logica del file... (non
potendo prcessare niente si incarta)
Quindi pare sia colpa dei percorsi scritti male... ??
Come è preferibile scriverli?
Perchè se scrivo su shell funziona e eseguo da crontab no?
Lo script si trova qui:
/usr/home/dir/
Il file.php si trova qui dentro:
/usr/home/dir/admin-nl
La roba che includo sta qui:
/usr/home/dir/admin-nl/include
Gli include del mio file.php sono scritti così:
include("../include/nl_db.php");
include("../include/nl_funzioni.php");
OK, risolto coi path assoluti (anche se scomodo...)
Prova con:
include("../admin-nl/include/nl_db.php");
include("../admin-nl/include/nl_funzioni.php");
Andrea
puoi ovviare mettendo nello script bash (che a questo punto ti servirebbe)
un ampliamento alla varibile PATH
export PATH=$PATH:dirdovestannoifiledaincludere
> Perchč se scrivo su shell funziona e eseguo da crontab no?
Perché crontab č sempre un calcio nel culo con i propri default per le
variabili di ambiente, ti conviene impostarle esplicitamente.