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