• 締切済み

Linuxの起動と起動スクリプトにつきまして

Linuxの起動と起動スクリプトにつきましてご質問させてくださいませ。 chkconfig などで Sではじまる起動スクリプトを定義した場合 起動時にスタートさせるプロセスでありKで始まるものは、シャットダウン時に自動停止(引数stop)すると思いますが、たとえばSで始まるスクリプトのみ定義しておりそのスクリプトにKの定義がなかったばあい、自動停止はしないのでしょうか? シャットダウン時には、どのような挙動になるのでしょうか? その場合、killなどで強制的に切れるのでしょうか? よろしくお願い申し上げます。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

> ランラベル6でK「スクリプト名」と定義されてるのに 正確には「[SK][0-9][0-9]スクリプト名」、つまりS/Kとスクリプト名の間に2桁の数値が入るのですが、それは大丈夫ですか? まぁ先にsyslogがstopしてしまってて/var/log/messageに書かれてないだけ、なんて可能性もあるかもしれませんが。

y_mikami19
質問者

お礼

D-Matsu様 遅くなり大変申し訳ござません。 ご回答いただきましてありがとうございました。

回答No.4

回答No.2での y_mikami19 さんの理解で合ってます. 回答No.3の回答も合ってます.

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

ランレベル遷移で発生するスクリプト実行は共通処理ですが、その処理は自分がどのフェーズで呼ばれているかを知りません。 そこにあるものを、命名規則に従って粛々と実行しているだけです。 なのでシャットダウン処理中であろうがSで始まるスクリプトはstartオプション付きで呼ばれますし、起動中であろうがKで始まるスクリプトはstopオプション付きで呼ばれます。 ただし、そのスクリプトの中身がデーモンの起動や停止処理であるかどうかはまた別の話です。

y_mikami19
質問者

補足

D-Matsu様 ありがとうございます。 ことなった質問になってしまいますが、宜しくお願いいたします。 今回、ランラベル5で起動しランラベル6でリブートしそのログを Messageログより見ますと、ランラベル5で自動起動していたものが ランラベル6でK「スクリプト名」と定義されてるのにSTOP(処理)されてません。そのスクリプトだけ飛ばされております。 通常の自動起動自動停止が定義されており正常に実行された場合 start スクリプト名 stop スクリプト名 が実行されると認識しておりますが、 上記の場合 start スクリプト名 STOPの処理が飛ばされています。 そのプロセスはどのような終わり方をするのでしょうか? なぜ、処理が飛ばされるのでしょうか? 以上 宜しくお願いいたします。     

回答No.2

No.1の回答への補足です. システムを停止する場合はランレベル0になり /etc/rc0.d 内の Kで始まるスクリプトが実行され,既存のサービスがあれば それを終了させます.続いて Sで始まるスクリプトが実行され,新しいサービスを開始します. Ubuntu の /etc/rc0.d の最後のスクリプトは以下のようになっています. S90halt -> ../init.d/halt こんな手順でシステムを停止させています. 最初の質問に戻ると シャットダウン時に確実に停止させたいサービスは Kで始まるスクリプトを用意すべきだということになります. 参考書籍:RUNNING LINUX (O'REILLY ISBN4-87311-131-5)

y_mikami19
質問者

補足

ricky-oda様 y_mikami19でございます。 シャットダウン時 ランレベル0でKで始めるスクリプトを実行後 Sで始めるスクリプトが実行されとございますが、 シャットダウン処理においても 最初にKで始めるスクリプトが停止しその後Sで始めるスクリプトが起動させているということでしょうか? 起動時もランラベル5で起動される場合、SやKが各スクリプトについておりますが、その仮定においてもスタート停止がおるということでございましょうか。 要は 起動時にいおいて、スクリプトを開始するだけだとおもっておりましたが、停止処理もおこなっているのでしょうか? よろしくお願いいたします。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

SとKに対する挙動の理解が若干違います。 これは「特定のランレベルになったときにそのデーモンを起動または終了」で、起動時に限らずランレベルの変更があればいつでも実行されます。 で、これは通常j/etc/rc[0-6].d以下にあるスクリプト(へのシンボリックリンク)を検索して実施されるので、ここにリンクが置かれていない場合には該当ランレベルでは何もしない(起動・終了とも)ことになります。 なおシャットダウン時に残っているプロセスは(デーモンに限らず)もちろんkillされます。

関連するQ&A

  • シェルスクリプトの正規表現

    こんばんは。 CentOSでサービスを再起動しようと思ったのですが、資料に書いてある 通りにスクリプトを作っても動きません(起動はできるけど 再起動、停止ができない)。 仕方がないのでプロセスをkillしたあとスクリプトを起動して再起動 する方法を取ろうとしていますが、最後の1歩で詰まりました。 echoでps -axをした結果を変数に入れて先頭の数字(PID)だけを 切り出そうとするのですが、プロセスIDが、空白+PID4桁の時と 空白なしPID5桁のときとあるので上手くHitさせることが出来ません。 mofu=`ps -ax|grep qmail-send` 4桁) mohe=`expr "$mofu" : \(^\s[0-9]*\)'` 5桁) mohe=`expr "$mofu" : \([0-9]*\)'` kill $mohe /etc/rc.d/init.d/qmail シェルスクリプトで自動化したいので、PIDの桁数に関係なく確実に killしたいです。 上手い方法があったら御教授下さい。 よろしくお願いします。

  • Apache(httpd)の自動起動について

    CentOS4でサーバ電源起動時にApacheを自動起動する設定方法についてご教授をお願いできますでしょうか。 オーソドックスなやり方では、chkconfig httpd onというコマンドを使用して、httpdが自動で立ち上がるようにすると思います。 このたび上司から既存のサーバのレプリカを作ってほしいと依頼されたのですが、chkconfig --listコマンドでそのサーバの自動起動の設定を見ると、 httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off となっているのです。 それでも自動起動しているのはなぜでしょうか?どのような設定をすれば実現可能でしょうか? なお、ps axコマンドでそのサーバのプロセスを見ると、 10928 ? S 0:00 /usr/sbin/httpd -k start となっています。 一方、chkconfig httpd onでhttpdを自動起動した場合のプロセスは、 3873 ? S 0:00 /usr/sbin/httpd となっており、かなり若いプロセス番号であることと、行末に「-k start」がついていないことが異なります。 この「-k start」が一つの手がかりとなると思うのですが、(何かでキックしているのでしょうか?)これは何の意味でしょうか? なお、 /etc/httpd/conf/httpd.conf や /etc/init.d/httpd は両者ともに同じで、ほぼデフォルト状態です。 以上、何卒ご指南くださいますようお願いいたします。

  • Linux デーモンのpsコマンドでの確認

    RHEL6.2の環境でデーモン起動しているプロセスを監視しようとしています。 ところがchkconfigで起動対象になっているデーモンで、psコマンドでみると存在しないものがいます。 ランレベルはあっていました。 具体的には以下のプロセスです。 ■"chkconfig"onで"ps aux"で表示されるプロセス  ・crond  ・ntpd ■"chkconfig"onかつ"ps aux"で表示されないプロセス  ・kdump  ・netfs  ・lvm2-monitor  ・network "chkconfig"での起動は常に常駐起動しているものかと思っていたのですが、認識が異なるでしょうか? それともコマンドのオプション等の確認方法が間違っていますでしょうか。 または起動に失敗している?? 監視用のスクリプトの都合上、psコマンドでなければ見ない方向にしたいと思います。 初歩的な質問になりますが、ご存じの方がいらっしゃいましたら、情報を頂きたいです。

  • Apacheの自動起動ができません

    自動起動用のScriptを書き、シンタックスエラーも出なかったのですが、 # chkconfig --add apache とすると、 ========================================================== サービス apache は、chkconfig をサポートしていません ========================================================== と返事が返ってきてしまいます。 前までは、chkconfigはうまく行っていたのですが、OSの再インストールし、検証環境を構築している段階でこのエラーが出てしまいました。 どなたか、chkconfigをうまくいかせる方法をご存知でしたら教えてください。 お願いします。

  • Acronis の再起動方法

    RHEL6.2 です。 Acronis で自動バックアップしているのですが、 0%実行中のまま、3日以上も経っています。 一度停止させて、原因調査をしたいのですが、 「停止」をクリックしてもジョブが実行中のまま何もできずにいます。 またOSを再起動するのはマズい状況です。 OSを再起動させずにAcronis だけを完全に再起動させる方法はありますか? もしくは、強制停止みたいな方法があれば教えてください。 ※ kill コマンドでのプロセス停止もダメでした。 よろしくお願いします

  • プログラムの一時停止について

    Linuxである計算プログラムを実行しています。そのパソコンをシャットダウンする必要があるので、現在動いているそのプログラムをシャットダウン前に停止して、パソコンの再起動後に計算も復帰させたいと思っております。そのプログラムに一時停止機能はございませんので、OS側でその作業を行いたいと思っています。 はじめ、”kill -STOP プロセスID”でプログラムを停止して、”kill -CONT プロセスID”で復帰できると思ったのですが、それで復帰させようと思うと、そのようなプロセスIDはありませんというエラーメッセージが出ました・・・。パソコンを停止しなければ、そのコマンドで上手く停止・復帰が出来たのですが・・・。 パソコンを再起動しても、実行プログラムを停止・再開させる方法をご存知の方がいれば、是非アドバイスを頂きたいです。

  • 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の起動時にとまっている事は 明らかです。 いったい何が原因なのか、さっぱりわかりません。 どなたかヒントだけでもいただけたら幸いです。 よろしくお願いします。

  • Apache起動の不思議

    起動スクリプトの勉強をしていてつまづいてしまったのでご教示ください。 RedHat7.2JにApache1.3.xxをRPMインストールしたサーバーがあります。OS起動時に自動起動されるようになっていてランレベル3で起動した後Web閲覧はできているのですが、起動スクリプトのあるrc3.dの中にはSxxhttpdが存在しません(逆にK15httpdが存在します)。 chkconfig で見ると全てのランレベルでhttpdがオフになっています。でもなぜかhttpdは起動している、という不思議な状況です。いったい何がApacheを起動しているのでしょうか?可能性としてはスーパーサーバー(xinetd)位でしょうけど・・??

  • デーモンの登録について

    Solaris9のデーモンの登録について教えてください。 現在、以下の場所にスクリプトファイルが登録させています。  /etc/rc2.d/S99web-admin 今回、既存の S99web-admin の後に実行させたいスクリプトがあります。 そこで、 /etc/rc2.d/S98web-admin (Webサーバの管理用サービス:既存のものをS99からS98に変更する) /etc/rc2.d/S99web-server1 (Webサーバのサービス) のように変更・追加しようと思っています。 (質問1) これは「S98web-admin」が起動されるのを待ってから、「S99web-server1」が起動されるという動作になるのでしょうか? それとも、「S98web-admin」→「S99web-server1」の順番で起動されるだけで、実行される時間間隔はその時次第(不明)、 「S98web-admin」が起動されたかの確認は行わないということになるのでしょうか? ※条件としては、「S98web-admin」が起動していることを確認してから「S99web-server1」を起動したいと考えております。 (質問2) 上記のサービスをストップさせる場合、rc5(シャットダウン用)とrc6(再起動用)の両方に追加する必要があるということになりますか? また、ストップのスクリプトを登録しなかった場合、shutdownコマンドなどで、OSを再起動・シャットダウンした際の挙動はどのようになりますか? killコマンドで停止しても良いようなサービスであれば、わざわざデーモンに停止の登録をする必要はないものなのでしょうか? もしくは、根本的に考え方など間違っているような感じでしたら、その点もご指摘ください。 以上、よろしくお願いいたします。

  • 自動起動時のログについて

    現在FedoraCore6にapache-tomcat-5.5.23をインストールしてOS起動時にTomcatを自動起動させようと考えています。 自動起動のシェルスクリプト/etc/rc.d/init.d/tomcatを作成し、コマンドラインからTomcatが起動および終了するのを確認しました。 合わせて、chkconfig --add tomcatのコマンドを実行し、 chkconfig --listコマンドで2,3,4,5レベルがonになっていることを 確認しました。 ですが、OS起動時にTomcatが自動起動しません。 /usr/local/tomcat/logs配下のログファイルには何も出力されていなかったので、おそらくOSがなんらかの理由で自動起動シェルスクリプトを実行しなかったのだと考えています。 で、その関連のログファイルを探しているのですが、見つけることができませんでした。 Linuxの自動起動のログはどこに出力されるのか、教えていただければと思います。 当方、Linuxを始めて1週間程度の素人ですがよろしくお願いいたします。