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


79

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

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


9
使用しているディストリビューションとバージョンは何ですか?サービス管理(サービスはUnixの世界ではほとんど常に「デーモン」と呼ばれます)は、以前は簡単で準標準でした。最近は状況がより多様になっています。そして、常に良いとは限りません。:)また、コンテキストとはどういう意味ですか?
アレクシオス

systemdはinitシステム戦争にゆっくりと勝っているように見えますが。Debianは、まだ古いSysVinitを使用している最後の大きな抵抗であり、現在、どのinitシステムを使用するかを決定中です。
パトリック

1
現在、私はDebian(最新の安定版)で作業しています。コンテキストでは、パス変数または指定されたユーザーコンテキストを意味します。
Erdinc Ay

1
serverDebianでコマンドのみを使用する必要がある場合は、unix.stackexchange.com / q / 226089/130402
Peter Krauss

回答:


124

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

しかし、3つの初期化システムのそれぞれに対するあなたの質問に対する答えは次のとおりです。

 

SysVinit

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

起動時にSysVinitサービスを有効にする方法は、シンボリックリンク/etc/rc3.d(または/etc/rc2.d)です。すべてのサービスはにあります/etc/init.d。ただし、ディストリビューションにはこれらのファイルを管理するための独自のツールがあることが多く、代わりにそのツールを使用する必要があることに注意してください。(Fedora / RedHatにはとがserviceありchkconfig、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を使用した最も注目すべきディストリビューションはFedoraです。それは他の多くの人によって使用されていますが。さらに、Debianはsystemd overstartを使用することを選択したため、ほとんどのディストリビューションの事実上の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 は新興企業をやめると発表しました

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はそれを使用する唯一のディストリビューションであり、使用が検討されておらず、他のディストリビューションでもサポートされていません。そのため、私はそれの使用法をカバーしていません(意見が私がそうであるならば、私はそれを加えることができます)。


OpenRCは、SysVinitの抽象化のようなものです。それを置き換えるのではなく、追加します。
スパイディ

素晴らしい記事!わずかな修正がいくつかあります。RHEL6.x(したがって、CentOS 6.xとその他の派生物)はUbuntuと同様にupstartを使用します(ただし、ほとんどのサービスはまだSysVスクリプトを使用しています)。また、「chkconfig」(RH)と「update-rc.d」(Debian)は、rc?.dディレクトリへのリンクを追加する「公式」な方法です。
rsuarez

RHEL6に関して@rsuarezの良い点。あまり使用していないようですが。システムのほとんどは、引き続きレガシーSysVinit(17個のupstart、RHEL6システムのいずれかで89個のSysVinit)を介して実行されます。そしてchkconfigupdate-rc.d言及されています。SysVinitの下の2番目の段落を参照してください:-)
パトリック、

@Patrickは#1に同意します。"おっと!" #2で:-)
rsuarez

1
包括的な答えをありがとう、今私は全体像をつかんだ。現在、私はDebian(最新の安定版)を使用しています。ここではドイツ語圏のヨーロッパで最高の推奨事項がありますが、Redhatを試してみるかもしれません。
Erdinc Ay

9

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

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

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

簡単に言えば、新しいサービスの起動スクリプトを作成する場合:

  • でシェルスクリプトを記述し/etc/init.dます。このスクリプトは、かもしれ一つの引数を受け入れる必要がありstartstopforce-reloadrestart、または(オプション)reloadまたはstatus。違いreloadとは、restartそれがあるrestartと同等であるstopが続くstartreload(サービスがサポートしている場合)、何も停止することなく、コンフィギュレーションをリロードします。利用可能であれば、そうforce-reloadしませreloadrestart。例については、Debianで既存のファイルとブート時にスクリプトを実行するをご覧ください。
  • 実行update-rc.dしてシンボリックリンクを作成し、サービスを開始および停止します。ほとんどのサービスは、ランレベル2、3、4、5で実行されます。

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


2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.