
次のスクリプトがあります。
#!/bin/bash
/usr/bin/echo q | /usr/bin/htop -C | /usr/bin/aha --line-fix | /usr/bin/html2text -width 999 | /usr/bin/grep -v "F1Help\|xml version=" > htop.txt
htop
ただ出力をキャプチャします。
コマンドラインからスクリプトを実行すると正常に動作しますが、rootを介してcrontab
実行すると次のようになります。
15 15 * * 1-5 /bin/bash /root/collect_system_stats.sh
htop.txtは1バイトに過ぎず、hexdump
以下を表示します。
0000000 000a
0000001
私は何が間違っていましたか?
答え1
--line-buffered
フラグでgrepを使用する必要があります。それ以外の場合は、最初の一致後にgrepが終了します。これについての完全な説明はありませんが、これが私のスクリプトが同様の状況で動作する理由です。
確立されたこの回答grep のラインバッファです。
htopを使用してcronjobをrootとしてインストールすると、次のエラーメッセージが表示されることがあります。
/usr/bin/htop -C Error opening terminal: unknown
TERM=xterm
スクリプトで設定すると、この問題を解決できます。