最近まで、サービスを開始/停止/再開するためのシンプルで効果的な方法がありました。
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。この特定の質問の範囲外ですが、ソリューションがサービスの有効化と無効化の部分もカバーする場合、追加の賞賛が与えられます。
複雑な歴史の中で、Unixプラットフォーム全体でさまざまなブートおよびサービス制御システムが数多くあります。
service\chkconfig
ベースのシステムシンプルで効果的なは、一般に SysVinit スタイルと呼ばれ、ある種の標準化への道のりの主要なステップでした。このスタイルのブートは、RHEL/CentOS(EL)から6リリースまで、Fedoraから14まで、およびDebian/Ubuntuベースのディストリビューションで2015年まで見られます。 initシステムにはまだ多くのファンがあります。
SysVinitは完全なソリューションではなく(何ですか?)、 Systemd は多くの問題を克服するために考案されました。これは、現在経験しているsystemctl
コマンドベースのシステムです。それは普遍的に好まれるわけではありませんが(人々の憎悪の変化、膨満感など)、ほとんどのディストリビューションで急速に事実上の標準になっていることは間違いありません。
したがって、元の質問への回答をすぐに先に見ることは簡単です。
標準Linuxディストリビューション全体でサービスを制御するほとんど方法が今ではsystemctl
!
これが成り立つ期間は誰でも推測できます。たぶん何かが起こるまではbetterで広く採用されるようになるでしょう。
きっと許可できるラッパーがあると思います。あなたの現在のお気に入りはservice/chkconfig
コマンドは、ほとんどが健全なことを続けますが、この特定の学習曲線では、おそらくそれと戦わないのが最善です。たぶん楽しみにしているかもしれませんが、しばらくの間、古いシステム用のsystemctl
ラッパーも存在し、より新しいものと一緒にそれらを管理することで苦痛を減らすことができます;)
古い
service
コマンドを、代わりにservicectl
[sic]を呼び出すラッパーで置き換えるのは意味がないのでしょうか?はい、ただし[…]ラッパーで処理できるため、systemdへの移行がユーザーにとってスムーズになります。
…つまり、他の人がコメントで述べたように、以来ずっと行われてきたこと。
Debian 8の/usr/sbin/service
コマンドは、sysvinit-utilsパッケージの一部です。それは2009年から存在しています。これは、元のsysvinitソースパッケージへのDebian固有のRedHat由来の追加であり、スクリプトを読むとわかるように、systemdの実行とupstartジョブの存在の両方を認識し、systemctl
およびinitctl
(エイリアスを介して)それぞれ。これは2013年以来行われています。
service nameaction
は、Linux以外のオペレーティングシステムでもかなり広く利用できます。独自のservice
コマンドがあるため、ほとんどのBSDでも動作します。 noshパッケージには、system-control actionname
に変換されるshim service
コマンドもあります。だが …
service
コマンドがありません。service
コマンドには、システム管理者が何十年にもわたって戦争の物語を語ってきたという長年のよく知られた問題があります。サービスの有効化と無効化は同様の状況です。 SuSE chkconfig
プログラム(DebianおよびUbuntu用にパッケージ化されて入手可能)はFedoraのもの(それらはまったく異なるプログラミング言語で書かれていて、コンパイルされたものと解釈されたもの)とは非常に異なりますが、共通の最小限のものがありますchkconfig nameaction
構文、actionはon
またはoff
です。だが …
chkconfig
はありません。これは、従来のツールがsysrc
または最新のOpenBSD rcctl enable
とrcctl disable
のいずれかであるためです。 noshパッケージにはchkconfig
およびrcctl
シムがあり、これらはsystem-control enable name
およびsystem-control disable name
に変換されます。chkconfig
だけがsystemdを認識し、systemctl enable
およびsystemctl disable
のシムとして機能します。 SuSE chkconfig
はsystemdの知識がありません。script/service
。 init-system-helpers。 Debianソースアーカイブ。telinit
。 noshガイド 。 1.20。 JdeBPのソフトウェア。service
コマンドに関する問題はもうありません 。 noshページ。 JdeBPのソフトウェア。service
。 §8。 FreeBSDマニュアルページ。Linuxでサービスを開始および停止する標準的な方法はありません。
この運命の変更から私を救うことができるものはありますか?
構成管理/オーケストレーションツールを試してください: Ansible 、 Chef 、 Saltstack 、 Puppet など。
Ansibleを使用してサービスを開始および有効化できます。
ansible all -i inv -m service -a 'name=service-name state=started enabled=true'
Ansibleの service
モジュールの LinuxService class を見てください:
これはLinuxサービス操作クラスです。現在、起動時に開始されるサービスを制御するため、および現在の状態を制御するために、バイナリとinitスクリプトの混合をサポートしています。
あなたの問題は、Debian/Ubuntuが古いsystemd
の代わりに新しいsysvinit
に切り替えたことです。どちらが優れているかを尋ねると、炎の戦争が始まりますが、いつでも元のsysvinit
に戻すことができます。元に戻したい場合は this を確認してください。