Linuxでサービスを開始および停止する標準的な方法はありますか?


15

最近まで、サービスを開始/停止/再起動する簡単で効果的な方法がありました。

service nginx start|stop|restart

これは何年も完璧に機能しました...一部のスマートパンツがそれらを改善することを決定し、今ではserviceスクリプトが何もしないDebian / Ubuntuシステムに直面しています(私はsystemctl start nginx.service(はるかに長いもの、オートコンプリート機能なし、...)

私の質問は特にDebianとUbuntuに関するものですが、CentOS / RedHatのディストリビューションもカバーすることも役立ちます。

だから、この運命の変化から私を救うことができる何かがありますか?

明確でない場合、Debian 7.x、8.x、最新のUbuntu LTSおよび非LTSで動作する一貫した方法を探しています。

PS。この特定の質問の範囲外ですが、ソリューションがサービスの有効化および無効化部分もカバーする場合、追加の称賛が与えられます。


5
タブ補完はsystemctlで機能します...そして、好むと好まざるとにかかわらず、systemd 事実上の標準になりました:慣れるでしょう。
-jasonwryan

1
追加:サービスコマンドが役に立たなくなった場合、削除できますか?どのパッケージがそれを提供しますか?
ソリン

3
古いserviceコマンドを、代わりにservicectlを呼び出すラッパーに置き換えるのは意味がありませんか?
ソリン

4
@jasonwryanはい、しかしそれだけでなく、ラッパーがそれを処理でき、systemdへの移行がユーザーにとってスムーズになります。
ドミトリーグリゴリエフ

2
service本当にあなたのために何もしませんか?私のLMDE(基本的にはDebianのテストです)で期待通りに動作しますが、これはLMDE固有のことだとは思いませんでした。私のUbuntu VMでも期待どおりに動作します。
テルドン

回答:


6

絡み合った歴史の中で、Unixプラットフォーム全体でさまざまなブートおよびサービス制御システムが数多くありました。

service\chkconfigあなたが見つけベースのシステム、シンプルで効果的なのは、一般的に呼ばれるはsysvinitのスタイルや標準化のいくつかの並べ替えへの道に沿って大きな一歩でした。このリリースのブートスタイルは、RHEL / CentOS(EL)の6リリース、Fedoraから14、およびDebian / Ubuntuベースのディストリビューション(2015年まで)にあります。 initシステムにはまだ多くのファンがいます。

SysVinitは完璧なソリューションではありませんでした(何ですか?)。Systemdは多くの問題を克服するために考案されました。これは、systemctl現在経験しているコマンドベースのシステムです。普遍的に好まれているわけではありませんが(人々は変化や肥大化を嫌います)、ほとんどのディストリビューションでデファクトスタンダードになりつつあることは間違いありません。

したがって、あなたの元の質問を楽しみにすぐに答えを探して、単純である:標準渡ってサービスを制御する方法ほとんどの Linuxディストリビューションは、今あります これがいつまで続くかは、誰でも推測できます。おそらく何かが実現するまでは、それがより良く、広く採用されるようになるでしょう。
systemctl

あなたの現在のお気に入りであるservice/chkconfigコマンドがほとんど正気なことを続けることを可能にするラッパーがあると確信していますが、この特定の学習曲線ではおそらく戦わないことが最善です。将来的には、しばらくの間systemctl、古いシステム用のラッパーもあり、それらを最新のシステムと一緒に管理して痛みを軽減するかもしれません;)


そして、これの前にxinetdがあり、その前にinetdだった
jas-

@jas-inetdは本当にサービスそのものだと思います。すべてのブートシステム内に存在できると思います。これらは、オンデマンドで提供することにより、フルサービスとして実行する他のサービスの代替を提供するという点で、特別な種類のサービスです。しかし、このQの文脈であなたがどこから来たのか、サービスを開始する別の方法を理解しています。
DanSut

すべてのディストリビューションで。gentoo、centos、redhat、debian、ubuntuなど、xinetdおよび以前のinetdは、さまざまなサービスの構成を開始、停止、およびリロードするための小さなシェルスクリプトで構成されていましたが、確かにsystemdと同じようなサービスでした。
-jas

Ubuntuは6.10以来、成り上がり使用とFedora以来9(彼らはsystemdに置き換えられたまで)upstart.ubuntu.com、かなりの数年間のためにはsysvinitから離れてのDebianを切り替えることが可能となっていますと...
ジェームズTocknell

5

古いserviceコマンドをservicectl代わりに[sic] を呼び出すラッパーに置き換えるのは理にかなっていないでしょうか?

はい。ただし、[…]ラッパーで処理できるため、systemdへの移行がスムーズになります。

…これは、他の人がコメントで述べたように、それ以来ずっと行われてきたことです

/usr/sbin/serviceDebian 8 のコマンドはsysvinit-utilsパッケージの一部です。それはそれは、元はsysvinitソースパッケージをDebian固有のRedHatの由来さらにだし、スクリプトを読んでから分かるように、それはにコマンドを出し農業、systemdにランニングや成り上がりジョブの存在の両方を認識し、2009年以来があったsystemctlinitctl(それぞれそのエイリアスを介して)。これは2013年以来行われています。

service name actionLinux以外のオペレーティングシステムでも非常に広く利用可能です。BSDにも独自のserviceコマンドがあるため、ほとんどのBSDで動作します。servicenoshパッケージには、に変換するshim コマンドもあります。だが …system-control action name

  • …この共通のサブセットを超えると、全体的に互換性がはるかに低くなります。
  • …OpenBSDにはserviceコマンドがありません。
  • …BSD serviceコマンドには、システム管理者が何十年も戦争の話をしてきたという長年のよく知られた問題があります。

サービスの有効化と無効化も同様の状況です。SuSEのがchkconfig一般的最小がある、 - (DebianとUbuntuのためにパッケージ入手可能)プログラムはFedoraのものと非常に異なっている(一つ一つが解釈、コンパイルされた彼らも、全く異なるプログラミング言語で書かれている)構文はで、アクションがある、または。だが …chkconfig name actiononoff

  • …繰り返しますが、この共通のサブセットを超えると、互換性が低下します。
  • chkconfigBSDにはありません。これのための従来のツールはsysrc、最近のOpenBSD rcctl enablercctl disable。あるchkconfigrcctlに変換間食パッケージにシムと。system-control enable namesystem-control disable name
  • …Fedoraのみがchkconfigsystemdについて知っており、andのshimとして機能systemctl enablesystemctl disableます。SuSE chkconfigはsystemdの知識がありません。

参考文献


2

Linuxでサービスを開始および停止する標準的な方法はありません。

この運命の変化から私を救うことができる何かがありますか?

構成管理/オーケストレーションツールを試してください:AnsibleChefSaltstackPuppetなど。

Ansibleでサービスを開始して有効にできます。

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

AnsibleのモジュールのLinuxServiceクラスを見てくださいservice

これはLinuxサービス操作クラスです。現在、起動時に開始されるサービスを制御するため、および現在の状態を制御するために、バイナリとinitスクリプトの混合をサポートしています。


どういうわけか、Ubuntuの人たちはsystemdに切り替えた後もサービススクリプトを動作させ続けることができたようです。内部を見ると、適切なバックエンドを使用するのに十分賢いようです。Debianについても同じことは言えません。
ソリン



1

あなたの問題は、Debian / Ubuntuがsystemd古いの代わりに新しいものに切り替えたことsysvinitです。1が優れている尋ねると、あなたは炎の戦争を開始しますが、あなたはオールウェイズ古いに戻すことができsysvinit、チェックこれをあなたが戻りたい場合。

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