topコマンドを使用したcronスクリプトとTERM定義の問題


11

サーバーでの現在のCPU使用を確認するためにcronプロセスを実行する際に問題があります。

私のスクリプトは次で始まります:

top -c -n 1 -u www-data > /tmp/kill-cpu

私はコンソールで問題なく実行できますが、cronでは

top:ttyの取得に失敗しました

topに-bオプションを使用した場合

top -b -n 1

私は得る

「ダム」:不明な端末タイプ。

TERMとしてxtermを使用しています

ご協力ありがとうございます:)
リト。

解決策私は次の方法で問題を解決できました。

ln -s /lib/terminfo/d/dumb /usr/share/terminfo/d/dumb

回答:


8

次のようなものを試すことができます:

TERM=vt100 top -b -n 1

これにより、「top」コマンドで実行するようにTERM変数が設定されます。

しかし、根本的な問題は、termcapデータベースが不完全または破損していることです。見るべきDebianマシンはありませんが、Ubuntuボックスでは、「ダム」termcap情報はファイル/ usr / share / terminfo / d / dumbにあります。このファイルは、Ubuntu 8.04および10.04のncurses-baseパッケージの一部です。RHELでは、ncursesパッケージの一部です。おそらく、インストールにこのファイルが欠落しているだけでしょうか?


ええ、私はちょうどトップソースを掘り下げていたので、バッチモードを選択すると、TERMはダムに設定されます。
-user9517

いいえ、このコマンドでは問題は解決しません:root @ server:〜#TERM = vt100 top -b -n 1 'dumb':不明な端末タイプ。root @ server:〜#ls / usr / share / terminfo / d / dumb ls:/ usr / share / terminfo / d / dumb:そのようなファイルまたはディレクトリはありません/ usr / share / terminfo / d /フォルダーに286個のファイルがあります
リト

OK、そのシステムに/ usr / share / terminfo / d / dumbファイルが見つからない理由を理解する必要があります。述べたように、私は遊ぶためのDebianボックスを持っていません。Ubuntuでは、そのファイルを提供するパッケージは「ncurses-base」です。「apt-cache search dumb」を実行して、Debianで必要なパッケージを特定することができます。作業中のDebianボックスからファイルをコピーすることもできますが、パッケージが欠落しているか壊れているかを把握する方が良いでしょう。
cjc

はい、apt-cache検索ダム| grep term = ncurses-baseですが、パッケージをインストール/再インストールしても問題は解決しません。私の他の(開発)Debian 6サーバー(本番と同じバージョン)では、問題なく "top -b"を実行できますが、この愚かな用語ファイルはありません...
Lito

「strace top -b -n 1 2>&1 | grep term」のようなものを実行します。これにより、「top」コマンドがアクセスしているterminfoファイルが表示されます。これは、すべてが機能しているボックスと、機能していないボックスで行います。RHELボックスで実行したところ、最初に〜/ .terminfo / d / dumbでterminfoが検索されます。他のボックスでcronを実行しているユーザーがそのファイルを持っている可能性があります。そうでない場合、「strace」は「top」コマンドが実際に実行していることを示します。
cjc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.