私はRHELの派生製品であるAmazon Linux AMIを使用しており、SysVintをservices
。services
functions
/etc/init.d/functions
私は理解できません。仕組みsuccess
とfailure
機能(似たようなものもありますが、warning
原則とコードは同じです。)
私のfunctions
スクリプトはここで発見関数success
は次のとおりです。
# Log that something succeeded
success() {
[ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
return 0
}
echo_success() {
[ "$BOOTUP" = "color" ] && $MOVE_TO_COL
echo -n "["
[ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
echo -n $" OK "
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "]"
echo -ne "\r"
return 0
}
"${LSB:-}"
正直なところ、この変数はどこにも見つからないので、この部分を理解していませんLSB
。ただし、重要な部分はスクリプトが関数を使用する方法ですsuccess
。たとえば、daemon
関数の最後の行は次のようになります。
[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"
$"$base startup"
これに続くパラメータは確認されていないため、これは私には意味がありません。文字列が記録されているようですが、どのように記録されるかはわかりません。echoed
success
echo
本当にバグがあると思います。それとも何か理解していないようです...関数の本質はsuccess
カーソルと一緒に緑色のインラインを印刷することです。[ OK ]
たとえば、私のtomcat
スクリプトは[ OK ]
カーソルの上に新しい行を印刷するのではなく、端末のカーソルに印刷します。これは本当に奇妙です。
テキストは次のようにする必要がありますtomcat is running... [ OK ]
が、私のターミナルラインに印刷されるので、私のユーザー名とIPはほとんど切り捨てられます。
それでは、私が間違って理解しているのでしょうか、それともsuccess
RHELサービスの機能がどこでも誤って使用されているのでしょうか?
答え1
あなたが間違っているわけではありませんが、これらの機能が使用されているとは言えません。間違って。
"${LSB:-}"
正直なところ、このLSB変数はどこにも見つからず、この部分は理解できません。
どこでも$ LSBセットが見つかりません。この変数がチェックされる理由は次のとおりです。
[ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
テスト結果はecho_success
BOOTUP変数の値ですいいえ「Verbose」、LSB変数は次のようになります。いいえ置く。構文定義${varname:-text}
は次のとおりです。
${parameter:-word} はデフォルト値を使用します。
引数が設定されていないか空の場合、単語の拡張が置き換えられます。それ以外の場合、パラメータ値は置き換えられます。
ここでダッシュの後には「単語」がないため、$ LSBが設定されていないかnullの場合、拡張結果全体が(なし)になり、テストに-z
合格します。
私のもの推測するinitスクリプトの動作を変更したい場合はロジックがあります。いいえこれらの成功()または失敗()関数を実行してください。
第二に、
スクリプトが成功関数を使用する方法(デーモン関数の最後の行など)は次のとおりです。
[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"
これらのパラメータは関数に渡されますが、使用されないという点で正確です。未使用のパラメータを渡すことは無害です。一貫性がないか混乱するだけです!私のもの推測するこれらの関数の以前のバージョンでは、渡された引数を見ましたか(おそらく文書化されていますか?)。
このinit_crypto()
関数は成功()(または失敗())を呼び出すことに注意してください。いいえパラメータ!