14

Linuxで開いているファイルをカウントし、結果をフラットファイルに保存する小さなスクリプトがあります。後で結果を収集するために、毎分 Cron で実行するつもりです。スクリプトは次のとおりです。

/bin/echo "Timestamp: ` date +"%m-%d-%y %T"` Files: `lsof | grep app | wc -l`"

そしてcrontabはこれです:

*/1 * * * * /usr/local/monitor/appmon.sh >> /usr/local/monitor/app_stat.txt

shell ./script.sh から実行すると、うまく機能し、次のように出力されます。

Timestamp: 01-31-13 09:33:59 Files: 57

しかし、Cronの出力は次のとおりです。

Timestamp: 01-31-13 09:33:59 Files: 0

権限が必要かどうか、または同様かどうかはわかりません。lsof で sudo を試してみましたが、運もありませんでした。

ヒントはありますか?

4

1 に答える 1

19

作業中のコマンドラインから、

which lsof
which grep
which wc
which date

これらの各コマンドのフル パスを取得し、シェル スクリプトに追加して、次のようなものを作成します。

/bin/echo "Timestamp: `/bin/date +"%m-%d-%y %T"` Files: `/usr/sbin/lsof | /bin/grep app | /bin/wc -l`"

または、不足している値をスクリプトに含めるように PATH var を設定できます。

 PATH=/usr/sbin:${PATH}

また、スクリプトが真の Bourne Shell 環境から実行されることを期待しない限り、90 年代初頭に参加し、$( cmd ... )バッククォートではなく cmd-substitution の形式を使用してください。1995 年に発行された Ksh 93 ブックでは、コマンド置換のバッククォートは非推奨であると述べられています ;-)

IHTH

于 2013-01-31T14:51:27.577 に答える