Windowsには、サービスマネージャーがあり、Windows自体から開始できるすべてのシステムサービスが表示され、使用するユーザーをセットアップし、権限管理がそこにあり、変数やその他の情報をサービスに渡すことができます、名前を付けたり、1つのプログラムの複製サービスを作成したりできます。 Windowsにメインの管理ツールがあります。
Linuxでどうすれば同じことができますか?起動時に「svnserve」の実行をトリガーする方法、または特別なコンテキストで実行されるようにサービスを構成する方法「プログラムされた」サービスをすべて表示するにはどうすればよいですか?
現在、Linuxで使用されている3つの主要な初期化システムがあります。数年前には、SysVinitだけがありました。しかし、SysVinitはサービス依存関係のグラフ化などの機能が大幅に不足していたため、現在ではほとんどのディストリビューションで非推奨になっています。現在、ほとんどのディストリビューションは systemd に切り替えています。 pstart もありますが。
しかし、これが3つのinitシステムのそれぞれに対するあなたの質問への答えです:
現在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は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つの方法:
/etc/default/{SERVICENAME}
という行を含むENABLED=...
ファイルがあります。この行をENABLED=1
に変更します。
ファイル/etc/init/{SERVICENAME}.override
があります。 start
ではなくmanual
が含まれている(または完全に含まれていない)ことを確認してください。
echo manual > /etc/init/{SERVICENAME}.override
注:Gentooで使用されている「OpenRC」initシステムもあります。現在、Gentooはそれを使用する唯一のディストリビューションであり、その使用は考えられておらず、他のディストリビューションによってサポートされていません。だから私はそれの使い方をカバーしていません(私がそうするのであれば、私はそれを追加することができます)
異なるディストリビューションは、異なるメカニズムを使用してサービスを管理します。サービスを管理するソフトウェアは 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
にシェルスクリプトを記述します。このスクリプトは、start
、stop
、force-reload
、restart
、または(オプション)reload
またはstatus
。 reload
とrestart
の違いは、restart
はstop
の後に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構成にラッパーを使用しているかどうかによって異なります。端末からサービスを実行することを妨げるものは何もありません。実際、テストの目的で一般的です。