2015-05-01 13 views
5

Abbiamo uno script di shell che viene eseguito da CRON. Lo script di shell a sua volta esegue uno script python che scarica i file da un server FTP e quindi esegue un processore di log java su quei file. Il processo gira bene, tranne che continuo a ricevere e-mail CRON anche se non ci sono errori. Almeno, penso che non ci siano errori. L'e-mail cron ha due linee, di cui una delle linee è

tput: No value for $TERM and no -T specified 

Dopo la ricerca di un po ', ho scoperto che si tratta di qualcosa a che fare con l'impostazione della variabile $ TERM. Non sono sicuro, come farlo. Qualsiasi aiuto sarebbe apprezzato. Grazie!

risposta

2

Qualcosa nello script chiama il binario tput. tput tenta di esaminare la variabile $TERM per determinare il terminale corrente in modo che possa produrre le sequenze di controllo corrette. Non c'è un terminale quando cron è in esecuzione in modo da ottenere questo errore da tput.

è possibile assegnare manualmente un valore TERM al lavoro cron (probabilmente dumb o qualcosa di simile a quello) oppure (e questo è probabilmente la soluzione migliore) si può scoprire che cosa sta chiamando tput e rimuovere quella chiamata.

+0

Io chiamo altre librerie, che potrebbero chiamare tput. Proverò ad assegnare un valore TERM e vedere se lo risolve – Seagull

+0

Grazie! Ho appena impostato la variabile TERM su "stupido" come hai suggerito, e questo ha funzionato! – Seagull

3

Il demone cron viene eseguito dall'utente "root" nella propria shell. Per impostazione predefinita, cron aggiungerà una mail di sistema inviata all'utente che esegue lo script (ecco perché vedi il mittente come 'root' nella posta di sistema). L'utente è l'utente in cui è stato effettuato l'accesso come quando si imposta crontab. La posta conterrà console e messaggi di errore. Su Ubuntu, il file di posta è visualizzabile su /var/mail/<username>.

Se non è impostata la variabile $TERM, cron emetterà un errore tput: No value for $TERM and no -T specified nel file di posta. Per interrompere questi errori, impostare la variabile $TERM utilizzando TERM=dumb (o un altro terminale disponibile nel sistema, come xterm) in crontab. Il comando toe mostrerà le definizioni terminfo sul sistema corrente. Se manchi questo comando, puoi vedere i dati grezzi in /usr/share/terminfo sulla maggior parte dei sistemi Linux.

Anche se sono stati interrotti gli errori, è comunque possibile ricevere la posta di sistema aggiunta con i messaggi della console. Questo file si riempirà come un log nel tempo, quindi potresti voler interrompere questi messaggi. Per interrompere la posta sistema di cron, impostare la variabile MAILTO utilizzando MAILTO=""

Così il vostro crontab potrebbe essere simile:

MAILTO="" 
TERM=xterm 

* * * * * sh /path/to/myscript.sh 

È possibile visualizzare la crontab (per l'utente che si è effettuato l'accesso come) con '-l crontab '.