PDA

View Full Version : Crontab su Ubuntu 6


dany84
29-06-2009, 22:22
Ciao a tutti,
sto cercando di impostare l'esecuzione automatica di uno script php con crontab.
Dentro il mio file crontab il codice è il seguente:

* * * * * php /var/miaDirectory/miofile.php>/tmp/file_da_eseguire.log 2>/tmp/file_da_eseguire.err

Il file viene eseguito normalmente da shell scrivendo:

php /var/miaDirectory/miofile.php

Ma con crontab non parte. I file di log non vengono nemmeno creati.
Mi aspetto che parta ogni minuto, ma nulla.
I permessi sul file miofile.php sono settati a 777.

Qualcuno ha qualche consiglio?
Vorrei evitare di creare un file .sh se possibile :stordita:

Grazie :)

sacarde
30-06-2009, 08:17
prova con path assoluto


/usr/bin/php

dany84
30-06-2009, 09:08
L'avevo già provato e non andava, riprovato anche ora per sicurezza e continua a non funzionare e a non creare i log.
Ci dev'essere magari qualche configurazione particolare su Ubuntu per farlo funzionare?
O forse devo cambiare la cartella del file da eseguire? Sia il file crontab che il mio script si trovano sotto /var/, il primo è nello spool di crontab, il secondo in un percorso diverso, ma magari potrebbe non piacergli messo in quella cartella?

sacarde
30-06-2009, 09:16
e se metti:

/usr/bin/php /var/miaDirectory/miofile.php

?


puoi vederlo se viene eseguito?

dany84
30-06-2009, 09:19
provato ora, viene eseguito correttamente da shell (non intendevi da crontab vero?)

sacarde
30-06-2009, 09:29
intendevo da crontab

p.s.
crontab da root o da utente?

dany84
30-06-2009, 09:31
no da crontab non va scrivendo solo quello
crontab da root comunque

sacarde
30-06-2009, 09:57
strano, sembra corretto


http://www.htmlcenter.com/blog/running-php-scripts-with-cron/


vedi errori nel log di cron ?

dany84
30-06-2009, 10:01
ehm, scusa l'ignoranza, ma conosco davvero poco Linux...dove trovo il log di cron? :stordita:

ma aspetta, nel link che hai scritto dice che se ho apache installato dovrei farlo eseguire tramite browser Lynx e non tramite php...dici che dovrei provare così?

sacarde
30-06-2009, 10:16
i log li trovi in /var/log

cron.log
o
crond

dany84
30-06-2009, 10:24
non esiste nessuno di quei file di log :muro:
ci dev'essere qualche altro problema se non ha neanche il log suppongo...
ho provato ad eseguirlo anche con lynx (ho controllato che fosse installato) sempre da crontab, com'era scritto nell'articolo che mi hai linkato, ma nulla

sacarde
30-06-2009, 10:32
ma il servizio crond e' attivo ?

dany84
30-06-2009, 10:42
questa è un'ottima domanda :fagiano:
online non ho trovato da nessuna parte qualcuno che avesse scritto che andasse avviato, sembrava si avviasse da solo ad ogni avvio della macchina...
quindi...come si fa a controllare se è avviato o no?
ho trovato un articolo che dice che si può avviare da "rc" o "rc.local", il file "rc.local" l'ho trovato, ma non ho capito che ci devo fare...:(
non mi uccidere, ma potresti darmi il comando da shell per avviarlo o cmq controllare se è attivo?

edit: trovato /etc/init.d/cron start

è partito, ma ancora non va e i log non ci sono...almeno sappiamo che è attivo però

sacarde
30-06-2009, 10:49
per vedere se cron e' in esecuzione:

ps aux | grep cron



per avviarlo:
sudo /etc/init.d/cron restart


p.s.
leggiti:
http://wiki.ubuntu-it.org/AmministrazioneSistema/Cron

dany84
30-06-2009, 10:52
ok, fatto, mi dà questo log:

root 21912 0.0 0.0 2032 784 pts/0 T 05:44 0:00 crontab -e
root 21913 0.0 0.1 2372 1288 pts/0 T 05:44 0:00 /usr/bin/editor /tmp/crontab.VhYXct/crontab
root 24563 0.0 0.0 2032 784 pts/0 T 05:13 0:00 crontab -e
root 24565 0.0 0.1 2372 1292 pts/0 T 05:13 0:00 /usr/bin/editor /tmp/crontab.8BSnUb/crontab
root 27945 0.0 0.0 2060 856 ? Ss 05:50 0:00 /usr/sbin/cron
root 28204 0.0 0.0 1552 492 pts/0 R+ 05:51 0:00 grep cron

grazie per il link, ora lo leggo bene :)

sacarde
30-06-2009, 11:05
hai aperto 2 crontab -e ?

cmq il servizio cron e' in esecuzione.....

io proverei a eseguire un'altro script semplice


p.s.
http://www.casualcode.com/2008/05/18/how-to-enable-cron-log-in-ubuntu/

dany84
30-06-2009, 11:10
hai aperto 2 crontab -e ?

cmq il servizio cron e' in esecuzione.....

io proverei a eseguire un'altro script semplice

no, in teoria li ho chiusi tutti...forse sono rimasti appesi, ora ne ho addirittura 3 :confused:

provo con un altro script più semplice allora
grazie della pazienza :)

sacarde
30-06-2009, 11:13
prova a killarli quelli appesi...



http://www.casualcode.com/2008/05/18/how-to-enable-cron-log-in-ubuntu/

dany84
30-06-2009, 11:23
ho seguito le istruzioni del link che hai messo ma non mi killa nulla, uff
il file di log ancora non lo crea oltretutto
ho messo uno scriptino semplice semplice come c'era scritto sul link che mi hai mandato poco più su:

* * * * * echo "ciao">/tmp/log.txt

ma ovviamente non fa nulla

ma non è che magari la versione di ubuntu è troppo vecchia?

sacarde
30-06-2009, 11:30
ma metti:

echo "ciao">/tmp/log.txt

o

echo "ciao" > /tmp/log.txt



p.s.
per killare: sudo killall crontab

p.s.
il link era per abilitare il log
...
Edit /etc/syslog.conf and uncomment the line starting with cron.*
... ecc

dany84
30-06-2009, 11:35
ah ecco mi sembrava di aver letto che servisse per i log :D
non killa nulla comunque, ora ne ho 5 aperti :cry:

modificato il crontab senza gli asterischi...quando dovrebbe venire eseguito?

sacarde
30-06-2009, 11:41
gli asterischi vanno bene.... io non vedevo gli spazi tra le parole:

* * * * * echo "ciao" > /tmp/log.txt



p.s.
prova a killarli con: sudo kill -9 <numeroidprocesso>

dany84
30-06-2009, 12:00
ok, killati tutti
il crontab ancora non va purtroppo però

sacarde
30-06-2009, 12:37
ho provato anche io:

* * * * * echo "ciao" >> /tmp/log.txt

e funziona


p.s.
hai questi file in /etc ?
cron.allow e cron.deny

dany84
30-06-2009, 12:43
no, non ci sono, devo crearli? cosa ci scrivo dentro?

sacarde
30-06-2009, 12:58
no no


ma il log lo hai attivato?

che dice?

dany84
30-06-2009, 13:08
ecco il log:

Jun 30 06:18:07 server /usr/sbin/cron[8108]: (CRON) INFO (pidfile fd = 3)
Jun 30 06:18:07 server /usr/sbin/cron[8109]: (CRON) STARTUP (fork ok)
Jun 30 06:18:07 server /usr/sbin/cron[8109]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 06:20:01 server /USR/SBIN/CRON[9976]: (smmsp) CMD (test -x /usr/share/sendmail/sendmail && /usr/share/sendmail/sendmail cron-msp)
Jun 30 06:21:33 server crontab[12167]: (root) BEGIN EDIT (root)
Jun 30 06:23:21 server /usr/sbin/cron[13796]: (CRON) INFO (pidfile fd = 3)
Jun 30 06:23:21 server /usr/sbin/cron[13797]: (CRON) STARTUP (fork ok)
Jun 30 06:23:21 server /usr/sbin/cron[13797]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 06:32:59 server crontab[22384]: (root) BEGIN EDIT (root)
Jun 30 06:35:58 server /usr/sbin/cron[25772]: (CRON) INFO (pidfile fd = 3)
Jun 30 06:35:58 server /usr/sbin/cron[25773]: (CRON) STARTUP (fork ok)
Jun 30 06:35:58 server /usr/sbin/cron[25773]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 06:39:01 server /USR/SBIN/CRON[28224]: (root) CMD ( [ -d /var/lib/php4 ] && find /var/lib/php4/ -type f -cmin +$(/usr/lib/php4/maxlifetime) -print0 | xargs -r -0 rm)
Jun 30 06:39:01 server /USR/SBIN/CRON[28226]: (root) CMD ( [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm)
Jun 30 06:40:01 server /USR/SBIN/CRON[29770]: (smmsp) CMD (test -x /usr/share/sendmail/sendmail && /usr/share/sendmail/sendmail cron-msp)
Jun 30 06:42:23 server crontab[32260]: (root) BEGIN EDIT (root)

sacarde
30-06-2009, 13:22
sinceramente .... non ci ho capito molto..

ma sono operazioni eseguite alle ore 6 di stamattina ..

non vedo il tuo comando echo


p.s.
per fare qualcosa.....
potresti provarlo inserendolo da "crontab -e" dal tuo utente

metti >> al posto di > , cosi vedi se itera

dany84
30-06-2009, 13:27
è l'orario del server, ha 6 ore di differenza rispetto al nostro fuso, sono state fatte oggi intorno a mezzogiorno :)

il comando del crontab lo inserisco sempre da crontab -e e il mio utente è sempre root, non ho altri utenti per accedere alla shell

ho messo ">>" invece di ">", vediamo se succede qualcosa

dany84
30-06-2009, 13:32
ah il file dove viene salvato il crontab si trova sotto /var/spool/cron/crontabs e si chiama "root"
da shell mi va a guardare automaticamente in quella cartella e in quel file, se può esserti d'aiuto

dany84
30-06-2009, 15:37
guardando meglio i log ho visto che utilizza il file /usr/sbin/cron come "motore" (almeno spero di aver interpretato bene il log) e allora ho provato a digitare questo da linea di comando:

/usr/sbin/cron /var/spool/cron/crontabs/root

e mi ha ritornato questo errore:

/usr/sbin/cron: can't lock /var/run/crond.pid, otherpid may be 28404: Resource temporarily unavailable

28404 dal log è il processo di startup:
Jun 30 10:30:46 server /usr/sbin/cron[28404]: (CRON) STARTUP (fork ok)
Jun 30 10:30:46 server /usr/sbin/cron[28404]: (CRON) INFO (Skipping @reboot jobs -- not system startup)

potrebbe essere utile?
se è un tentativo inutile mi scuso, è l'unica cosa che mi è venuta in mente ragionando sul log :fagiano:

sacarde
30-06-2009, 16:06
- si, cron memorizza la crontab dove hai detto tu...
ma non ci aiuta nel tuo problema, puoi solo verificare che ci sia il tuo comando


- cron non lo puoi lanciare un'altra volta, viene lanciato da:
/etc/init.d/cron restart


- ricapitolando: il comando nella crontab e':
* * * * * echo "ciao" >> /tmp/log.txt
e dentro /tmp/log.txt non vedi nulla ?

dany84
30-06-2009, 16:32
- si, cron memorizza la crontab dove hai detto tu...
ma non ci aiuta nel tuo problema, puoi solo verificare che ci sia il tuo comando


- cron non lo puoi lanciare un'altra volta, viene lanciato da:
/etc/init.d/cron restart


- ricapitolando: il comando nella crontab e':
* * * * * echo "ciao" >> /tmp/log.txt
e dentro /tmp/log.txt non vedi nulla ?

esatto!
ho letto ora su un forum straniero che siccome il mio crontab viene eseguito come root devo metterlo nella cartella /etc/cron.d per far sì che venga eseguito, ma ho provato e non funziona lo stesso.
Oltretutto ora dal log vedo dei file che erano già presenti nelle cartelle cron.* in /etc/ e che vengono eseguiti correttamente, mentre il mio viene totalmente ignorato

sacarde
30-06-2009, 16:44
mmm


p.s.
che hai adesso nel crontab?

dany84
30-06-2009, 16:52
intendi il log?
l'ultimo pezzetto è così:
Jun 30 08:26:15 server crontab[7298]: (root) BEGIN EDIT (root)
Jun 30 09:27:57 server crontab[7298]: (root) END EDIT (root)
Jun 30 10:30:16 server crontab[28274]: (root) BEGIN EDIT (root)
Jun 30 10:30:22 server crontab[28274]: (root) END EDIT (root)
Jun 30 10:30:46 server /usr/sbin/cron[28403]: (CRON) INFO (pidfile fd = 3)
Jun 30 10:30:46 server /usr/sbin/cron[28404]: (CRON) STARTUP (fork ok)
Jun 30 10:30:46 server /usr/sbin/cron[28404]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 10:32:44 server /usr/sbin/cron[30229]: (CRON) DEATH (can't lock /var/run/crond.pid, otherpid may be 28404: Resource temporarily unavailable)
Jun 30 10:39:01 server /USR/SBIN/CRON[3585]: (root) CMD ( [ -d /var/lib/php4 ] && find /var/lib/php4/ -type f -cmin +$(/usr/lib/php4/maxlifetime) -print0 | xargs -r -0 rm)
Jun 30 10:39:01 server /USR/SBIN/CRON[3586]: (root) CMD ( [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm)
Jun 30 10:40:02 server /USR/SBIN/CRON[5173]: (smmsp) CMD (test -x /usr/share/sendmail/sendmail && /usr/share/sendmail/sendmail cron-msp)
Jun 30 10:42:59 server crontab[7742]: (root) BEGIN EDIT (root)
Jun 30 10:44:00 server /usr/sbin/cron[8161]: (CRON) INFO (pidfile fd = 3)
Jun 30 10:44:00 server /usr/sbin/cron[8162]: (CRON) STARTUP (fork ok)
Jun 30 10:44:00 server /usr/sbin/cron[8162]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 10:56:40 server crontab[7742]: (root) END EDIT (root)
Jun 30 10:56:45 server /usr/sbin/cron[20163]: (CRON) INFO (pidfile fd = 3)
Jun 30 10:56:45 server /usr/sbin/cron[20164]: (CRON) STARTUP (fork ok)
Jun 30 10:56:45 server /usr/sbin/cron[20164]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 10:58:50 server /usr/sbin/cron[22044]: (CRON) INFO (pidfile fd = 3)
Jun 30 10:58:50 server /usr/sbin/cron[22045]: (CRON) STARTUP (fork ok)
Jun 30 10:58:50 server /usr/sbin/cron[22045]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 11:00:01 server /USR/SBIN/CRON[23712]: (smmsp) CMD (test -x /usr/share/sendmail/sendmail && /usr/share/sendmail/sendmail cron-msp)
Jun 30 11:02:01 server /usr/sbin/cron[22045]: (*system*root) RELOAD (/etc/cron.d/root)
Jun 30 11:03:13 server crontab[28341]: (root) BEGIN EDIT (root)
Jun 30 11:03:32 server crontab[28341]: (root) END EDIT (root)
Jun 30 11:08:01 server /USR/SBIN/CRON[32403]: (root) CMD ( run-parts --report /etc/cron.hourly)
Jun 30 11:09:01 server /USR/SBIN/CRON[32758]: (root) CMD ( [ -d /var/lib/php4 ] && find /var/lib/php4/ -type f -cmin +$(/usr/lib/php4/maxlifetime) -print0 | xargs -r -0 rm)
Jun 30 11:09:01 server /USR/SBIN/CRON[32760]: (root) CMD ( [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm)
Jun 30 11:16:01 server /usr/sbin/cron[22045]: (*system*root) RELOAD (/etc/cron.d/root)
Jun 30 11:17:29 server /usr/sbin/cron[26158]: (CRON) INFO (pidfile fd = 3)
Jun 30 11:17:29 server /usr/sbin/cron[26159]: (CRON) STARTUP (fork ok)
Jun 30 11:17:29 server /usr/sbin/cron[26159]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 11:20:01 server /USR/SBIN/CRON[28091]: (smmsp) CMD (test -x /usr/share/sendmail/sendmail && /usr/share/sendmail/sendmail cron-msp)
Jun 30 11:22:01 server /usr/sbin/cron[26159]: (*system*root) RELOAD (/etc/cron.d/root)
Jun 30 11:34:00 server /usr/sbin/cron[8069]: (CRON) INFO (pidfile fd = 3)
Jun 30 11:34:00 server /usr/sbin/cron[8070]: (CRON) STARTUP (fork ok)
Jun 30 11:34:00 server /usr/sbin/cron[8070]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Jun 30 11:35:01 server /usr/sbin/cron[8070]: (*system*testfile) RELOAD (/etc/cron.d/testfile)


come comandi nella crontab ho sempre lo stesso di prima.

sacarde
30-06-2009, 17:00
stai provando questo?

/etc/cron.d/testfile



p.s.
dal log si vedono altri comandi (dei: find) , li hai nel crontab ?
insieme a:
* * * * * echo "ciao" >> /tmp/log.txt

dany84
30-06-2009, 17:11
Si il file è quello.
Quei comandi che vedi sono negli altri file che vengono eseguiti presi dalle varie cartelle cron.*.
Nel mio file c'è solo il comando che ti ho scritto e che non parte mai.

sacarde
30-06-2009, 19:20
prova a creare un file come quelli funzionanti

simile in tutto e per tutto, a iniziare dai permessi

dany84
30-06-2009, 19:43
fatto, funziona :muro:
a questo punto c'è qualcosa che non va nella sintassi forse...
ma per caso è obbligatorio mettere una riga di commento? perchè nel mio file non c'era mentre negli altri si

dany84
30-06-2009, 19:59
dunque, ho modificato il file con il mio "ciao" e funziona :D
ora sto provando a far eseguire il mio file php...il comando parte ma non succede quello che dovrebbe succedere (lo script invia una mail), quindi sto cercando di fare un po' di log, per vedere se almeno lo esegue o se non lo trova o non trova php.

sacarde
30-06-2009, 20:02
i commenti sono solo commenti


se ti puo aiutare,
negli script, le variabili d'ambiente non vengono settate
e usa i path assoluti

dany84
30-06-2009, 20:05
Funzionaaaaaaaaaaaaaaa :yeah:

Grazie grazie grazie dell'aiuto :D

Comincio a pensare comunque che volesse una riga di commento all'inizio...anche quando si edita con crontab -e ti propone una riga di commento (di default mette l'elenco dei parametri richiesti da sintassi), possibile?

edit: mi hai risposto

I path sono sempre stati assoluti, sinceramente non capisco cosa gli sia cambiato...meglio così comunque, anche se avrei voluto capire meglio

Grazie ancora comunque :)