一部のユーザー依存プロセスは上部に表示されません。

一部のユーザー依存プロセスは上部に表示されません。

スケジューラによって実行されると予想されるtopコマンドを含むスクリプトを開発しました。自分で実行すると期待した結果が得られますが、スケジューラで実行すると期待した結果は得られません。

問題のコード行は次の行です。

ESBLOGENTRY=`top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//'`

対話型および完全なコマンドオプション(-b -n 1 -c)なしでtopを実行し、grepを実行してタイムスタンプを追加しました。

システムのシステム管理者がrootまたは私と同じユーザーに対してsuコマンドを実行しましたが、時にはプロセスが消えました(ESBLOGENTRYが空です)。

スケジューラで使用するユーザーは出力を取得できません。

これに何が問題になるのかというアイデアはありますか?

ベストアンサー1

注文する

ESBLOGENTRY=`top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//'`

仮想出力にはtop少なくとも2つの文字列が含まれます。

DataFlowEngine ACES_KOFAX_TCM_DRS

34文字です。クイックチェックでは、top64列から始まるコマンドが表示されます。ただし、top最大80列までの行のみが表示されます。これは、環境が$COLUMNSより広い値に設定されている場合に使用できますtop(迅速な確認はDebian 7で発生します)。これtopマニュアルページオプションを使用すると、-wデフォルトは512列ですが、デフォルトの幅は言及しません。いいえオプション。

行が短くなると、grep forはACES_KOFAX_TCM_DRS失敗し、スクリプトは空の文字列を返します。使用する場合-wオプションを使用すると、スクリプトはより一貫して機能するはずです。

または、コマンドを次のように変更します。

ESBLOGENTRY=`COLUMNS=128 top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//'`

top他のプログラムを中断することなく環境を設定します。

おすすめ記事