• ベストアンサー

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の操作を教えていただければありがたい。

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

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.3

どちらかというと、4-STABLEを使用してきていたので、5.x系はあまり詳しくないですが。 最低、  1. サブルーチン群の読み込み(/etc/rc.subr)  2. スクリプト名の指定(name)  3. 起動するコマンド指定(command,start_cmd,stop_cmd等)  4. 実際の起動関数の呼び出し(run_rc_command "$1") を行えば大丈夫だと思います。 詳しくは、man rcとかman rcorderとか/etc/rc.subrのコメントあたりでも参照してみてください。 例で上げたスクリプトだと以下のような感じかな? (正常に動作するかは保障できませんが) -------8<-------8<-------8<-------8<------- #!/bin/sh cd /usr/local/xl-gbs PATH=$PATH:/usr/local/xl-gbs/xlscript/bin export PATH . /etc/rc.subr name=gbserver start_cmd=gbserver_start stop_cmd=gbserver_stop gbserver_start() { xl gbserver.xl / start echo } gbserver_stop() { xl gbserver.xl / stop echo } run_rc_command "$1" -------8<-------8<-------8<-------8<------- >また、/etc/rc.d の下にも同じようなファイルがいっぱいあります。 >こちらは.sh がついていない様子ですが、こっちへ入れても良いのでしょうか? >この二つのディレクトリの区別はあるのでしょうか? No.1でも少し触れましたが、システムで最初から用意されているものが/etc/rc.dディレクトリ配下、後からPackegeやPorts、ソースからのインストール等いれたものが/usr/local/etc/rc.dという感じですかね。 別に/etc/rc.dに入れたければ入れても構わないと思いますが、個人的には今までの使用してきた癖で/usr/local/etc/rc.d側に入れますね。  

hjoshua
質問者

お礼

だいぶ時間かかってしまいました申し訳ありません。 というのも、肝心の独自のサーバのバグ取りがなかなか大変でインストーラまで手が回りませんでした。 おかげさまでインストーラが出来ました。

その他の回答 (2)

回答No.2

FreeBSD 5.X-RELEASEから、rcNGという新しい起動スクリプトの 仕組みが導入されました。(ちなみに元はNetBSDのものです。) したがってご推察のとおり、rcNGの流儀に従えば、 起動スクリプトを簡潔に記述することが出来ます。 残念ながら、いま手元に5.Xのマシンが無いため、具体例を 示すことが出来ませんが、他の方の回答を待つか、 「rcNG スクリプト 書き方」あたりでgoogle検索してみてください。

hjoshua
質問者

お礼

だいぶ時間かかってしまいました申し訳ありません。 というのも、肝心の独自のサーバのバグ取りがなかなか大変でインストーラまで手が回りませんでした。 おかげさまでインストーラが出来ました。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

Linuxでのような操作はありません。 通常、PackagesやPortsから何かソフトウェアをインストールした場合のようにシステム以外のローカルなものの起動スクリプトは「/usr/local/etc/rc.d」ディレクトリ配下に「hogehoge.sh」(.sh付きでないと起動対象とならない)というファイル名の形式で置けばいいだけです(もちろん実行可能であることは前提ですが)。 起動/停止については、Linuxと同様に「hogehoge.sh start」、「hogehoge.sh stop」というように呼ばれます。 例に上げたスクリプトも修正すればFreeBSDでも使用出来ると思います。

hjoshua
質問者

補足

いま、てもちのFreeBSDの/usr/local/etc/rc.dの中みを見てみましたが、 % ls 000.pkgtools.sh % cat 000.pkgtools.sh #!/bin/sh # # $Id: pkgtools.sh 1047 2004-12-25 15:35:21Z knu $ # PROVIDE: pkgtools # REQUIRE: ldconfig # KEYWORD: FreeBSD . /etc/rc.subr name=pkgtools start_cmd=pkgtools_start stop_cmd=: [ -z "$pkgtools_libdir" ] && pkgtools_libdir="/usr/local/lib/compat/pkg" pkgtools_start() { if [ -d "$pkgtools_libdir" ]; then /sbin/ldconfig -m "$pkgtools_libdir" fi } load_rc_config $name run_rc_command "$1" % てな感じですね。どうも、最低限、start_cmd、stop_cmdという二つの変数(?)をセットアップすればよさげに見えますが、そんな解釈で良いのでしょうか。 また、/etc/rc.d の下にも同じようなファイルがいっぱいあります。こちらは.sh がついていない様子ですが、こっちへ入れても良いのでしょうか?この二つのディレクトリの区別はあるのでしょうか?

関連するQ&A

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

    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で確認すると一応止まっていますが、なんでこんなメッセージが出るのでしょうか? 気持ちが悪いので、出ないようにならないでしょうか?

  • 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 ------------------------------------------------------------------------ 宜しくお願い致します。

  • ネットワークの再起動方法

    FreeBSDにてPCを再起動せずネットワークを再起動することはできるのでしょうか? Linuxで言うところの /etc/init.d/network restart 的な事がしたいのです。 すみませんが、ご存知の方がいらっしゃいましたら ご教授願えないでしょうか?宜しくお願いします。

  • RedHat ES4でPostgreSQLを自動起動したい

    RedHatにPostgreSQL8.2.3をインストールしました。 インストール自体は他のディストリビューションでも何回も行っているので 特に問題なく終了しました。しかし自動起動がうまくいきません。 /etc/init.d/postgresqlを以下の内容で作成しました。 ----- ここから ----- #!/bin/sh # chkconfig: - 87 13 # description: PostgreSQL8.2 # processname: postmaster # pidfile: /var/run/postgresql.pid pidfile=/var/run/postgresql.pid . /etc/init.d/functions case "$1" in start) su - postgres -c "pg_ctl start" touch $pidfile ;; stop) su - postgres -c "pg_ctl stop -m fast" rm -f $pidfile ;; restart) su - postgres -c "pg_ctl stop -m fast" su - postgres -c "pg_ctl start" ;; *) echo "Usage: /etc/rc.d/init.d/postgresql {start|stop}" esac exit 0 ----- ここまで ----- このスクリプト自体はrootにて # /etc/init.d/postgresql start できちんとDBが起動する事は確認しています。これを以下のようにして 自動起動の設定を行いました。 # chmod 755 /etc/init.d/postgresql # chkconfig --add postgresql # chkconfig --level 35 postgresql on # chkconfig --level 06 postgresql off 問題はここからで、この状態で再起動を行うと、起動時にpostgresqlを 実行するところでとまってしまうのです。pidファイルなどゴミが無い事は 確認済みなのですが・・・その状態でもネットワークログインは出来るので プロセスを確認すると以下のようなプロセスが残った状態でとまっていました。 root 2765 0.0 0.0 5920 760 ? S 00:47 0:00 initlog -q -c /etc/rc5.d/S87postgresql start root 2766 0.0 0.0 6916 1336 ? S 00:47 0:00 /bin/sh /etc/rc5.d/S87postgresql start root 2769 0.0 0.0 6124 1276 ? S 00:47 0:00 su - postgres -c pg_ctl start この状態で # kill 2765 2766 2769 とすると起動がまた再開されるので、PostgreSQLの起動時にとまっている事は 明らかです。 いったい何が原因なのか、さっぱりわかりません。 どなたかヒントだけでもいただけたら幸いです。 よろしくお願いします。

  • RedHat 起動スクリプト(自作) 規約の存在?

    現在、業務で、RedHatLinuxで動作するプログラムを作成しております。 /etc/init.d 配下に、自作の起動スクリプトを用意して、 プログラムの {start|stop|restart|status}の制御を実行しようと 考えているのですが、 準拠した方がいい規約など、存在するのでしょうか? 例えば、status を知りたいときに、 root$ service hogehoge status と、入力するのですが、 そのときの、”出力は、こうした方がいい”みたいな 参考文献みたいなものは存在するのでしょうか? もし、ご存知の方がいらっしゃったら、 ご教示いただけるとありがたいです。

  • 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)は起動しませんでした。 私としてはスクリプトの書き方が間違っているのではないかと予想しているのですが、スクリプトについてネットで調べると、今回のような単純なアプリ起動・終了方法についての情報があまり載っていない(と思う)ため、自力では間違い箇所が発見できませんでした。 ついでと言ってはなんですが、起動スクリプトの書き方や設定方法について参考になるサイトがありましたら、そちらも教えていただけましたら幸いです。 以上、宜しくお願い致します。

  • 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
  • tomcatのリスタートについて

    tomcatのリスタートをしたいんですが 下記の2種類の方法ではだめでした。 別の方法、または再起動の方法を調べる方法を教えてください。よろしくお願い致します。 ===================================== 1:Tomcatを始動させるには /Tomcatまでのパス/bin/startup.sh を実行します。   Tomcatを停止させるには /Tomcatまでのパス/bin/shutdown.sh を実行しま   す 2:起動----/etc/rc.d/init.d/tomcat start   停止----/etc/rc.d/init.d/tomcat stop   再起動--/etc/rc.d/init.d/tomcat restart

  • POSTGRES8.2を自動起動したい

    POSTGRES8.2をシェルで自動起動したく、下記のとおり挑戦しています。 cd /etc/init.d/ vi pgsql #!/bin/sh # # chkconfig: 35 86 15 # description: PostgreSQL auto start PGACCOUNT="user1" PG_CTL="/usr/local/pgsql/bin/pg_ctl" . /etc/rc.d/init.d/functions echo "PostgresSQL start:" su - $PGACCOUNT -c "$PG_CTL start -o \"-i\"" そして下記の順番で設定・確認 chmod 755 ./pgsql chkconfig --add pgsql chkconfig pgsql on chkconfig --list pgsql pgsql 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ ここで、 su -l service pgsql とやるとPOSTGRESは起動します。 しかし、再起動してもPOSTGRESが起動してくれないのです。 問題解決の為にご協力をお願いします。

  • apacheの起動について

    Linuxに最新版のapacheを1.3.33を入れました。 うまく動作しているのですが少し疑問に思ったので質問させてください。 RedHatなのでもともとapacheが/etc/httpdにはいっていたのを今後の為通常の/usr/local/apacheにしました。 起動する際、 /usr/local/apache/bin/apachectr start としたのですが、よくある /etc/init.d/httpd start とか書いている場合もあるのですがこの二つの違いはなんなんでしょうか? 単純に/etc/httpdのapacheは/etc/init.d/httpd start で/usr/local/apacheのapacheの場合/usr/local/apache/bin/apachectr start で起動するということですか? よろしくお願いします。