web-dev-qa-db-ja.com

Debianのサービスはどのように機能し、どのように管理できますか?

Windowsには、サービスマネージャーがあり、Windows自体から開始できるすべてのシステムサービスが表示され、使用するユーザーをセットアップし、権限管理がそこにあり、変数やその他の情報をサービスに渡すことができます、名前を付けたり、1つのプログラムの複製サービスを作成したりできます。 Windowsにメインの管理ツールがあります。

Linuxでどうすれば同じことができますか?起動時に「svnserve」の実行をトリガーする方法、または特別なコンテキストで実行されるようにサービスを構成する方法「プログラムされた」サービスをすべて表示するにはどうすればよいですか?

81
Erdinc Ay

現在、Linuxで使用されている3つの主要な初期化システムがあります。数年前には、SysVinitだけがありました。しかし、SysVinitはサービス依存関係のグラフ化などの機能が大幅に不足していたため、現在ではほとんどのディストリビューションで非推奨になっています。現在、ほとんどのディストリビューションは systemd に切り替えています。 pstart もありますが。

しかし、これが3つのinitシステムのそれぞれに対するあなたの質問への答えです:

SysVinit

現在DebianとRedHatで使用されているSysVinit。ただし、RedHatの次のバージョン(7)ではsystemdが使用されます。

ブート時にSysVinitサービスを有効にする一般的な方法は、/etc/rc3.d(または/etc/rc2.d)でそれらをシンボリックリンクすることです。すべてのサービスは/etc/init.dにあります。ただし、ディストリビューションにはこれらのファイルを管理するための独自のツールが用意されていることが多く、代わりにそのツールを使用する必要があります。 (Fedora/RedHatにはservicechkconfigがあり、ubuntuにはupdate-rc.dがあります)

サービスのリスト:

ls /etc/init.d/

サービスを開始:

/etc/init.d/{SERVICENAME} start

または

service {SERVICENAME} start

サービスを停止:

/etc/init.d/{SERVICENAME} stop

または

service {SERVICENAME} stop

サービスを有効にする:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

S95は順序を指定するために使用されます。S01はS02の前に開始されます)

サービスを無効にする:

rm /etc/rc3.d/*{SERVICENAME}

Systemd

Systemdを使用する最も注目すべきディストリビューションはFedoraです。それは他の多くの人が使用していますが。さらに、Debianはupstartではなくsystemdを使用することを選択したため、ほとんどのディストリビューションで事実上のupstartシステムになります(ubuntuはすでにsystemdのupstartをドロップすることを発表しています)。

サービスのリスト:

systemctl list-unit-files

サービスを開始:

systemctl start {SERVICENAME}

サービスを停止:

systemctl stop {SERVICENAME}

サービスを有効にする:

systemctl enable {SERVICENAME}

サービスを無効にする:

systemctl disable {SERVICENAME}

アップスタート

UpstartはUbuntuの人々によって開発されました。しかし、debian systemdと一緒に使用することを決定した の後、Ubuntu pstartをドロップすると発表した .

UpstartはRHEL-6にも存在するため、RedHatでも一時的に使用されていましたが、一般的には使用されていません。

サービスのリスト:

initctl list

サービスを開始:

initctl start {SERVICENAME}

サービスを停止:

initctl stop {SERVICENAME}

サービスを有効にする:

残念ながら2つの方法:

  1. /etc/default/{SERVICENAME}という行を含むENABLED=...ファイルがあります。この行をENABLED=1に変更します。

  2. ファイル/etc/init/{SERVICENAME}.overrideがあります。 startではなくmanualが含まれている(または完全に含まれていない)ことを確認してください。

サービスを無効にする:

echo manual > /etc/init/{SERVICENAME}.override

注:Gentooで使用されている「OpenRC」initシステムもあります。現在、Gentooはそれを使用する唯一のディストリビューションであり、その使用は考えられておらず、他のディストリビューションによってサポートされていません。だから私はそれの使い方をカバーしていません(私がそうするのであれば、私はそれを追加することができます)

126
Patrick

異なるディストリビューションは、異なるメカニズムを使用してサービスを管理します。サービスを管理するソフトウェアは init と呼ばれ、他の起動を担当する最初のプロセス(プロセスID 1)の従来の名前にちなんでいます。

Debianは伝統的な SysVinit バリアントのinitを使用します。このシステムでは、ディレクトリ/etc/initにスクリプトのコレクションがあります(この場所と他の場所は、SysVinitを使用するディストリビューション間で少し異なる場合があります)。これらのスクリプトは直接呼び出されませんが、ディレクトリ/etc/rc?.dのシンボリックリンクを介して呼び出されます。サービスがいつ開始されるかを決定するのは、これらのシンボリックリンクの存在と名前です。詳細は Debianリファレンスのinitの章 をご覧ください。

/etc/rc?.dを見て、すでに存在するサービスを確認してください。ドットの前の文字または数字はランレベルです。名前がSで始まるエントリは、ランレベルに入るときに引数startで実行され、名前がKで始まるエントリは、ランレベルから出るときに実行されます。通常のランレベルシーケンスは次のとおりです:ブート中にS(so /etc/rcS.d/S*が実行されます)、次に2(so /etc/rc2.d/S*が実行されます)。シャットダウン時に/etc/rc2.d/K*が実行され、ランレベルが0(または再起動の場合は6)に切り替わります。

簡単に言うと、新しいサービスの起動スクリプトを作成する場合は、次のようにします。

  • /etc/init.dにシェルスクリプトを記述します。このスクリプトは、startstopforce-reloadrestart、または(オプション)reloadまたはstatusreloadrestartの違いは、restartstopの後にstartが続き、reloadが何も停止せずに構成(サービスがサポートしている場合)。 force-reloadは、利用可能な場合はreloadを行い、そうでない場合はrestartを行います。例については、既存のファイルと Debianの起動時にスクリプトを実行させる を参照してください。
  • update-rc.d を実行して、サービスを開始および停止するためのシンボリックリンクを作成します。ほとんどのサービスは、ランレベル2、3、4、5で実行されます。

Svnアクセスを提供するには、Apacheを設定してHTTPまたはHTTPSプロトコルを使用する方が簡単な場合があります。これには、Webブラウザーを介してリポジトリーを素早く参照できるという副次的な利点があります。

従来のUNIXの背景から、サービスについて特別なことは何もありません。サービスは単なるプロセスですが、2つの例外があります。ターミナルを必要とせず、起動時に開始されます。起動時にそれらがどのように開始されるかは、init(sysv init、bsd init、upstart、systemdなどのいずれかです。initのマニュアルページを確認してください)と、タスクまたはinit構成にラッパーを使用しているかどうかによって異なります。端末からサービスを実行することを妨げるものは何もありません。実際、テストの目的で一般的です。

2
hildred