Linux 起動スクリプト(shell)

このQ&Aのポイント
  • Linux(CentOS5)で自作の起動スクリプトを作成しているのですが、うまく動作しません。起動スクリプトから外部ファイルを読込んでいます。外部ファイルはiniファイルの設定によりwhileでループする仕組みです。httpdのように常駐起動させたいのですが、どのようにすればいいのでしょうか?
  • 起動スクリプトの場所は/etc/rc.d/init.d/aaaです。起動スクリプトはfunction読込、ネットワーク設定読込、INIファイル読込み、外部スクリプト実行の順で処理されます。外部スクリプトは外部ファイル処理起動と外部ファイル実行の順で処理されます。
  • 実行ファイルの場所は/usr/sbin/aaaです。実行ファイルは引数により外部スクリプトを実行します。外部スクリプトは設定に応じてループします。外部スクリプトの処理が止まってしまう場合、設定やパス、引数などを見直す必要があります。
回答を見る
  • ベストアンサー

Linux 起動スクリプト(shell)

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

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.1

一般的なアドバイスですが、各スクリプトの先頭に、 exec 2>> /tmp/log set -x と入れて、実行状況を調べてはどうでしょうか。

s0217071
質問者

お礼

起動スクリプト部分と外部読込コマンドを修正したらうまくいきました。 ありがとうございます。

関連するQ&A

  • rcスクリプトの作成について

    デーモンとして /home1/bea81/weblogic81/server/bin/startNodeManager.sh のファイルをOS起動時にサービスとして起動させたいと思っています。 そこでまず /etc/init.d/nodemanager として以下のスクリプトファイルを作成し、 実行権限を与えました。 確認として以下を実行しましたが、、 # nodemanager start nodemanager: not found # # echo $PATH /usr/sbin:/usr/bin # # /etc/init.d/nodemanager /etc/init.d/nodemanager: not found # と絶対パスで記述してもNotFoundとなってしました。 何が原因なんでしょうか? また現状/etc/init.d/にパスが通っていない状況なんですが、OS起動時に既に パスを通っている状態にするにはどのようにしたら良いのでしょうか? また/usr/bin/などは既にパスが通っている状況なんですが、このようなファイルを /usr/bin/などの中に入れてしまうという事でも問題ないのでしょうか? ------------------------------------------------------------------------ /etc/init.d/nodemanager ------------------------------------------------------------------------ #!/bin/sh # # /etc/init.d/nodemanager.sh # case "$1" in start) if [ -f /home1/bea81/weblogic81/server/bin/startNodeManager.sh ] ; then /bin/su - weblogic -c 'cd /home1/bea81/weblogic81/server/bin;./startNodeManager.sh &' fi ;; *) echo "Usage: /etc/rc2.d/S99nodemanager{ start | stop }" exit 1 ;; esac exit 0 ------------------------------------------------------------------------ 宜しくお願い致します。

  • シェルスクリプトの動きが不安定

    Redhat9で、DTC-Radiusというソフトを動かしているのですが、/etc/rc.d/init.d/radiusdというスクリプトが正常に動きません。 ☆radiusdの内容 #!/bin/bash # source function library . /etc/rc.d/init.d/functions start() { echo "Starting DTC_Radius: " /usr/etc/radiusd -d /etc/raddb -a /usr/adm/radacct return 0 } stop() { echo "Stoping DTC_Radius:" killproc radiusd return 0 } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; esac ☆エラー内容 /etc/rc.d/init.d/radiusd stop と実行すると Stoping DTC_Radius: /usr/etc/radiusd: Exit on signal (15) Dec 14 16:16:41.411 radiusd[4664] Exit on signal (15) /usr/etc/radiusd: Exit on signal (100) Dec 14 16:16:41.411 radiusd[4663] Exit on signal (100) /etc/rc.d/init.d/radiusd: line 195: kill: (4663) - そのようなプロセスはありませ ん と表示されます。PSで確認すると一応止まっていますが、なんでこんなメッセージが出るのでしょうか? 気持ちが悪いので、出ないようにならないでしょうか?

  • Linuxでの起動スクリプトの設定方法について

    Ubuntu10.04で、/etc/init.d/ の下に自作の起動スクリプトファイルを置いて、OS起動時にアプリが起動するようにしたいです。 Linuxについてはほぼ素人なので、ネット等で適当にスクリプトの書き方や設定方法を調べて、以下のような手順で実施してみましたが、うまく起動しませんでした。 以下に私が実施した手順を記載しますので、原因がわかる方、教えていただけませんでしょうか? (1)以下のスクリプトを書いたファイル(例えば"start_eclipse")を /etc/init.d/ の下に配置する。 #!/bin/bash start() { echo -n "Starting eclipse: " /opt/eclipse/eclipse return 0 } stop() { killproc eclipse return 0 } case "$1" in start) start ;; stop) stop ;; esac (2)Terminalで以下のコマンドを実行。(ランレベルや優先順位はデフォルト値に任せています) $ sudo su # chmod 755 /etc/init.d/start_eclipse # update-rc.d start_eclipse defaults (3)Ubuntuを再起動して確認。⇒アプリ(この場合はeclipse)は起動しませんでした。 私としてはスクリプトの書き方が間違っているのではないかと予想しているのですが、スクリプトについてネットで調べると、今回のような単純なアプリ起動・終了方法についての情報があまり載っていない(と思う)ため、自力では間違い箇所が発見できませんでした。 ついでと言ってはなんですが、起動スクリプトの書き方や設定方法について参考になるサイトがありましたら、そちらも教えていただけましたら幸いです。 以上、宜しくお願い致します。

  • FreeBSD における、アプリの起動スクリプトと登録の方法

    いま独自のサーバ用アプリを作っています。それを、FreeBSD起動時に自動的に立ち上がるようにしたいのですが、方法が分かりません。教えていただける方、あるいは、参考URLをご存知の方お教えください。 たとえば、linuxでしたら、 /etc/init.d/hogehoge start とすると、hogehogeアプリを起動し、 /etc/init.d/hogehoge stop とすると、hogehogeアプリを停止するようなスクリプトを書きます。hogehoge中身は、たとえば、以下のような感じですかね。 ----------------------------------------------------- #! /bin/sh # # chkconfig: 2345 85 15 # description: hoge hoge ... . /etc/rc.d/init.d/functions cd /usr/local/xl-gbs PATH=$PATH:/usr/local/xl-gbs/xlscript/bin export PATH start() { xl gbserver.xl / start echo } stop() { xl gbserver.xl / stop echo } restart() { stop start } case "$1" in start) start ;; stop) stop exit 1 ;; restart) restart ;; *) ;; esac exit 0 ----------------------------------------------------- その上で、 % chmod 0755 /etc/init.d/hogehoge % chkconfig --add /etc/init.d/hogehoge という風に登録します。 まあ、この操作に対応するFreeBSDの操作を教えていただければありがたい。

  • 【SuSE】PostgreSQLの自動起動が出来ない

    見ていただいてありがとうございます! SuSE LinuxでpostgreSQLの自動起動が設定できず 困っております。 ヒントでもかまいませんので、 ご教授いただきたく思っております。 postgreSQLのインストールはソースから行いました。 ログイン後なら、以下のコマンドを実行することで 起動することは可能な状態です。 #su - postgres #/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data> logfile 2>&1 & ■自動起動させるために行ったこと 1.自動起動スクリプトファイル "/usr/local/src/postgresql-8.3.3/cntrib/start-script/linux" をディレクトリ"/etc/init.d/"にコピーしました。 2.自動起動スクリプトファイルを 「postgresql」にリネームし、 全員に実行権限を付与しました。 3."/etc/init.d/rc*.d"に以下の名前で シンボリックリンクを作成しました。  ・rc0.d、rc1.d、rc2.dに「K02postgresql」  ・rc3.d、rc5.dに「S98postgresql」 現在、上記の操作をした状態となっておりますが、 rootでログインしてコマンド #pr -e を実行しても 「postmaster」の行があらわれません。 ちなみに、コマンド #chkconfig -list を実行すると postgresqlの行の 3 と 5 がONになっています。 現在Linuxのことを勉強中ですので、 質問に情報不足などあるかもしれません。 ご指摘いただければ、至急追加情報を提示いたします。 よろしくお願いいたします!

  • ランレベルと起動スクリプト

    ランレベルと起動スクリプトとの関係について教えてください。 rc*.dというファイルについて色々調べているのですが、 下記の説明を見つけまして /etc/rc1.d/ ランレベル1の際の起動スクリプト /etc/rc2.d/, ランレベル2の際の起動 スクリプト /etc/rc3.d/, ランレベル3の際の起動スクリプト /etc/rc4.d/, ランレベル4の際の起動スクリプト /etc/rc5.d/, ランレベル5の際の起動スクリプト デフォルトでsolaris起動時にランレベル3になるような場合、 rc3.dの中のスクリプトを読みに行くのはわかるのですが、 他のrc2.dやrc1.dは読みに行かないのでしょうか?

  • 起動スクリプト

    Mysql5系で起動スクリプトは以下のように設定しています。 #cat /etc/rc.d/rc.local if [ -x /usr/local/mysql5.0/bin/mysqld_safe ]; then /usr/local/mysql5.0/bin/mysqld_safe --user=mysql & fi これではpsで消すとかしか停止などができないので起動スクリプトを 作成したいのですが、作成方法がよくわかりません。 もし、Mysql5系で起動スクリプトを作成するとしたらどんな感じになるのでしょうか? できれば、START, STOPなども表示させるようにしたいのですが。。。

    • ベストアンサー
    • MySQL
  • tomcat自動起動がうまくいかない。

    FC3でApache2+tomcat4+mod_jk2で環境を構築しています。 Apache単体、tomcat単体、連繋とも全てうまくいきtomcatの自動起動設定を/etc/rc.d/init.d/tomcat というファイルで作製し、起動テストをおこなったのですが、実行時にエラーがでます。 作製したファイルの内容は以下のとおりです。 ここから #!/bin/sh # # Startup script for the tomcat # # chkconfig: 345 80 15 # description: Tomcat is a Servlet+JSP Engine. # Source function library. . /etc/rc.d/init.d/functions case "$1" in 'start') if [ -f /usr/local/tomcat/bin/startup.sh ]; then echo "Starting the tomcat service " su - nobody -c "export JAVA_HOME=/usr/java/j2sdk1.4.2_07;\export TOMCAT_HOME=/usr/local/tomcat;/usr/local/tomcat/bin/startup.sh" fi ;; 'stop') echo "Stopping the tomcat service." su - nobody -c "export JAVA_HOME=/usr/java/j2sdk1.4.2_07;\export TOMCAT_HOME=/usr/local/tomcat;/usr/local/tomcat/bin/shutdown.sh" ;; 'restart') $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0 ここまで rootでの/usr/local/tomcat/bin/startup.shを利用した起動は問題無く起動します。 JAVA_HOMEとCATALINA_HOMEは設定済みです。 どこが問題でしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • shellスクリプトから別のshellスクリプトを呼び出す方法

    今現在VineLinux4.1をサーバとして起動させております。 その関係もありまして維持としてシェルを動かす事はある意味必須の状態です。 本題はAと言うスクリプトからBと言うスクリプトを呼び出す方法がわかりません。 試してみた方法はsourceで呼び出す方法です。 A.shの中身を以下とすると #!bin/bash echo ="B.shを呼び出します" source B.sh echo ="シェルスクリプトを終了します" exit 0 上記のようにした場合、最初のecho文は出力され、B.shの内容を一通り終えると最後のechoは出力されずA.shは完了しません。 ごくごく基本的なことかもしれませんが、うまく検索にも引っ掛けられなかったので、ご質問させていただきます。 よろしくお願い致します。

  • Shellスクリプトについて

    趣味で自宅にubuntuを入れて、Linuxの本を片手にもって勉強している学生です それでshellスクリプトでテストの結果を入力したら自動的にA.B.Cと認識するプログラムを作ったんですけど $ ./test ./test: line 4: echoPlease input your record: command not found 12 ./test: line 7: case12in: command not found ./test: line 8: syntax error near unexpected token `)' ./test: line 8: `100 | 99 | 98 | 97 | 96 | 95 | 94 | 93 | 92 | 91| 90 ) echo"A";;' なぜコマンドが見つからないのかわかりません ちなみにプログラムは #!/bin/sh echo"Please input your record" read record case"$record"in 100|99|98|97|96|95|94|93|92|91|90) echo"A";; 89|88|87|86|85|84|83|82|81|80) echo"B";; 79|78|77|76|75|74|73|72|71|70) echo"C";; 69|68|67|66|65|64|63|62|61|60) echo"D";; 59|58|57|56|55|54|53|52|51|50) echo"E";; 49|48|47|46|45|44|43|42|41|40) echo"F";; 39|38|37|36|35|34|33|32|31|30) echo"G";; 29|28|27|26|25|24|23|22|21|20) echo"H";; 19|18|17|16|15|14|13|12|11|10) echo"I";; 9|8|7|6|5|4|3|2|1|0) echo"J";; *)echo"sorry,answer not recognized";; esac exit もしどこか間違っていたら教えてください