※ ChatGPTを利用し、要約された質問です(原文:Linux 起動スクリプト(shell))
Linux 起動スクリプト(shell)
このQ&Aのポイント
Linux(CentOS5)で自作の起動スクリプトを作成しているのですが、うまく動作しません。起動スクリプトから外部ファイルを読込んでいます。外部ファイルはiniファイルの設定によりwhileでループする仕組みです。httpdのように常駐起動させたいのですが、どのようにすればいいのでしょうか?
起動スクリプトの場所は/etc/rc.d/init.d/aaaです。起動スクリプトはfunction読込、ネットワーク設定読込、INIファイル読込み、外部スクリプト実行の順で処理されます。外部スクリプトは外部ファイル処理起動と外部ファイル実行の順で処理されます。
実行ファイルの場所は/usr/sbin/aaaです。実行ファイルは引数により外部スクリプトを実行します。外部スクリプトは設定に応じてループします。外部スクリプトの処理が止まってしまう場合、設定やパス、引数などを見直す必要があります。
Linux(CentOS5)で自作の起動スクリプトを作成しているのですが、
うまく動作しません。
/etc/rc.d/init.d配下にスクリプトを設置し、さらに起動スクリプトから
/usr/local/lib/sssの外部ファイルを読込んでいます。
その外部ファイルは、iniファイルの設定がtrueの場合、
whileで回る仕組みになっています。(sleep 何秒毎に動くか制御しています)
httpdのように常駐起動させたいのですが、どのようにすればいいのでしょうか?
実行すると処理が止まってしまいます。
■起動スクリプト
/etc/rc.d/init.d/aaa ← 起動スクリプト
|― function読込
|― ネットワーク設定読込
|― INIファイル読込み
|― 外部スクリプト実行
■実行ファイル
/usr/sbin/aaa ← 実行ファイル
|― 外部スクリプト読込
|― 外部スクリプト実行
■外部ファイル
|― 外部ファイル処理起動
|― INIファイルがtrueの場合、whileによりループされる。
--------------------------------------------
/etc/rc.d/init.d/aaa ← 起動スクリプト
start() {
if [ "${path}" = "true" ]; then
KIND="aaa"
echo -n $"Starting $KIND services: "
daemon aaa ${option} test
RETVALaa=$?
echo
[ $RETVALaaa -eq 0 ] && touch ${LOCKPATH}/${SERVICE_NAME}test || \
RETVALaa=1
return $RETVALaa
fi
(省略)
--------------------------------------------
/usr/sbin/aaa ← 実行ファイル
case $1 in
"-D" )
case $2 in
"test" )
sh ${path}/aaa > /dev/null &
;;
* )
;;
esac
;;
* )
echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}"
exit 2
esac
exit 0
(省略)
--------------------------------------------
■外部ファイル
if [ "${SETTING}" = "true" ]; then
while :
do
#メイン処理
(省略)
sleep ${SLEEP}
done
#設定がfalseの場合、何もしない
elif [ "${SETTING}" = "false" ]; then
echo -e "${CONFIG_FALSE}"
sleep ${SLEEP}
exit 10
#設定が未知のものなら、終了する
else
echo -e "Error: ${CONFIG_ERROR}"
exit 12
fi
# 終了
exit 0
お礼
起動スクリプト部分と外部読込コマンドを修正したらうまくいきました。 ありがとうございます。