web-dev-qa-db-ja.com

「tput:$ TERMの値がなく、-Tが指定されていません」CRONプロセスによってログに記録されたエラー

CRONによって実行されるシェルスクリプトがあります。シェルスクリプトは、FTPサーバーからファイルをダウンロードするpythonスクリプトを実行し、次にそれらのファイルに対してJavaログプロセッサを実行します。プロセスは正常に実行されます。ただし、エラーがなくてもCRONメールを受信し続けることを除けば、少なくともエラーはないと思います。cronメールには2行あり、そのうちの1行は

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

少し調べてみたところ、$ TERM変数の設定と関係があることがわかりました。どうすればいいのかわかりません。どんな助けでもいただければ幸いです。ありがとう!

13
Seagull

スクリプト内の何かがtputバイナリを呼び出しています。 tputは、$TERM変数を検査して現在の端末を判別し、正しい制御シーケンスを生成できるようにします。 cronが実行されているときはターミナルがないため、tputからエラーが発生します。

CronジョブにTERM値を手動で割り当てるか(おそらくdumbまたはそれに類似したもの)、または(これがより良い解決策である可能性があります)tputを呼び出しているものを見つけてその呼び出しを削除することができます。

6
Etan Reisner

Cronデーモンは、独自のシェルで「root」ユーザーによって実行されます。デフォルトでは、cronはスクリプトを実行しているユーザーに送信されたシステムメールを追加します(そのため、システムメールでは送信者が「root」と表示されます)。 'user'は、crontabを設定するときにログインしたユーザーです。メールには、コンソールメッセージとエラーメッセージが含まれます。 Ubuntuでは、メールファイルは/var/mail/<username>で表示できます。

$TERM変数が設定されていない場合、cronはメールファイルでtput: No value for $TERM and no -T specifiedエラーを発行します。これらのエラーを停止するには、crontabで$TERM(またはxtermなどのシステムで使用可能な別の端末)を使用してTERM=dumb変数を設定します。 toeコマンドは、現在のシステムのterminfo定義を表示します。そのコマンドがない場合は、ほとんどのLinuxシステムで/usr/share/terminfoに生データを表示できます。

エラーを停止した場合でも、コンソールメッセージが追加されたシステムメールが届く場合があります。このファイルは時間の経過とともにログのようにいっぱいになるため、これらのメッセージを停止することをお勧めします。 cronシステムメールを停止するには、MAILTO=""を使用してMAILTO変数を設定します

したがって、crontabは次のようになります。

MAILTO=""
TERM=xterm

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

'crontab -l'を使用して、(サインインしているユーザーの)crontabを表示できます。

7
Peter Bloom