serviceとsystemctlが同じコマンドであることを確認する方法は?

serviceとsystemctlが同じコマンドであることを確認する方法は?

Nginxを実行するためにSystemdをプロセスマネージャとして使用しようとしています。

を実行しsudo service nginx startてからを入力すると、起動時にps -aux | grep nginx実行していたのと同じプロセスのようですsudo systemctl start nginx

では、serviceマッピングできますかsystemctl?私はどのように知っていますか?

スクリプトを見るとの/etc/init.d/nginx構成とは大きく異なります/lib/systemd/system/nginx.service

ただし、systemctlそのコマンドを使用してnginxを起動し、serviceそのコマンドを使用して停止すると正常に動作します。順序は逆の順序で同じです。

答え1

sudo strace -f -e trace=process service nginx status 2>&1 | grep systemctl

答え2

ことわざのように「ファイルを見つける方法はいくつかあります」この場合、「同じプロセスが実行されている」という意味を完全には明確にしないので、2つの可能な問題について説明します。

つまり、最初に「systemctl ngix start」を実行してから「service ngix start」を実行すると、同じプロセスIDが実行されています。これは、デーモンがすでに実行されている場合、「開始」プロセスがデーモンを閉じずに新しいデーモンを起動するためです。この場合、結果はno-opでなければなりません。何かを作る止める進む前にスタート、または使用再起動代わりにコマンドを発行してください。

途中で停止(または再起動)する場合スタートコマンドを実行すると、どちらの場合もngixが実行されていることがわかります。プロセスIDが異なる場合でも、コマンドの引数は同じです。 「問題」は、どちらの場合も最終目標が次のようになるということです。 ngixを実行しています。コンテンツおよび構成ファイルの場所は変更されません。使用するオプションは、他のプログラムがそのオプションを実行しても変更されません。ほとんどすべての道はローマで通じる状況だ。

最後に疑わしいならシステム制御そして提供する同じファイルへのリンクを確認してみてください。

cmp `which systemctl` `which service` 

これはあなたに言うでしょうシステム制御そして提供するどちらもまったく同じコード(および/または同じファイルへのリンク)を含みます。

答え3

which systemctlまずwhich service、2つのファイルの出力を調べて、2つのファイルがls -l同じファイルであるか(シンボリックリンクを介して)、または同様に見えるか(サイズなど)を確認します。

少なくともここ(Fedora 23)には、systemdコマンドを使用してSysVinitコマンドをエミュレートするシェルスクリプトであるバイナリが/usr/bin/systemctlあります。/usr/sbin/service

関連情報