これは確かに使用可能に見えます。確認のために、crontabからX分ごとにこれを実行するつもりですか?それは合理的なようです。
唯一の主要な問題(IMHO)は、。を使用してSTDERR情報を破棄すること2>/dev/null
です。もちろん、それはこのシステムに対するあなたの期待に依存します。これが有料の顧客または雇用主向けである場合、上司に説明する必要がありますか?「まあ、STDERRをリダイレクトするため、過去3か月間エラーメッセージ「ホストXに接続できません」が表示されていることを知りませんでした。 / dev / nullに"!これが自分のプロジェクト用であり、他のチャネルを介して作業を監視している場合は、それほどひどいことではありませんが、STDERRをファイルにキャプチャし、エラーがないことを確認してください。一般的な考え方として...。
myStdErrLog=/tmp/myProject/myProg.stderr.$(/bin/date +%Y%m%d.%H%M)
wget -O $outputDir/check_status_update_index.txt ${statusCmd} 2> ${myStdErrLog}
if [[ ! -s ${myStdErrLog} ]] ; then
mail -s "error on myProg" me@myself.org < ${myStdErrLog}
fi
rm ${myStdErrLog}
STDERR出力に含まれるcurlによっては、StdErrLogにあるものをフィルタリングして、送信する必要のある「実際の」エラーメッセージがあるかどうかを確認する必要がある場合があります。
中程度のクイズは、コマンド置換にバックティックを使用することです。評価にdbl-sqr-bracketsを使用している場合は、完全なksh93/bashセマンティクスを採用してみませんか。バックティックを使用する唯一の理由は、超下位互換性が必要であり、このスクリプトをBourneシェル(またはダッシュなどの削除されたシェルの1つ)で実行する場合です。バックティックはkshで非推奨になりました。少なくとも1993年以来。試してみてください
status=$(fgrep idle $outputDir/check_status_update_index.txt)
コマンド置換の$( ... )
形式により、複数のcmd-subtitutionsをネストすることが非常に簡単になり echo $(echo one $(echo two ) )
ます。(悪い例ですが、cmd-subをネストする必要は非常にまれであるため、現時点でより良い例を考えることはできません)。
状況にもよりますが、新しいソフトウェアがバージョン番号付きのディレクトリにインストールされる大規模な実稼働環境では、変数からパスを構築することをお勧めします。
hostName=localhost
portNum=8080
SOLRPATH=/solr
SOLRCMD='delta-import&clean=false"
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}"
最後の、マイナーなクイブル;-)。本当にあなたが望むこと${status} == *idle*
をしますか?
次のようなものを使用してみてください
case "${status}" in
*idle* ) .... ;;
* ) echo "unknown status = ${status} or similar" 1>&2 ;;
esac
はい、確かに機能しますが、変数にif ... fi
入力した情報のより洗練された処理を開始したい場合は、それが最適な方法です。${status}
case ... esac
編集
私は@alinsoarに同意します2>/dev/null
。それは、1行でそれ自体がノーオペレーションになるということです。フォーマットの問題だと思いましたが、編集モードでコードを見ると、それが独自の行にあるように見えます。STDERRメッセージを本当に破棄したい場合は、cmd ... 2>/dev/null
すべてを1行にする必要があります。または、alinsoarの提唱者として、シェルは行の先頭でリダイレクトを受け入れますが、ここでもすべて1行です;-!。
IHTH