質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

1回答

3054閲覧

nginxのプロセスが止められない

cunwe

総合スコア65

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

0クリップ

投稿2021/10/08 12:54

nginxを起動しようと思い、brew services start nginxとすると

==> Tapping homebrew/services Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'... remote: Enumerating objects: 1440, done. remote: Counting objects: 100% (319/319), done. remote: Compressing objects: 100% (233/233), done. remote: Total 1440 (delta 123), reused 245 (delta 80), pack-reused 1121 Receiving objects: 100% (1440/1440), 425.38 KiB | 1.42 MiB/s, done. Resolving deltas: 100% (599/599), done. Tapped 1 command (35 files, 525.2KB). ==> Successfully started `nginx` (label: homebrew.mxcl.nginx)

と表示されこの状態で
ps ax | grep nginxとすると

42526 ?? S 0:00.02 nginx: master process /usr/local/opt/nginx/bin/nginx -g daemon off; 42571 ?? S 0:00.00 nginx: worker process 42633 s000 R+ 0:00.00 grep nginx

となりました。この後にnginx -s stopを実行してps ax | grep nginxで確認すると

42883 s000 S+ 0:00.01 grep nginx

となり、ワーカープロセスとマスタープロセスが止まりました。

一方、次は別の方法で起動しようと思い、sudo nginxで起動してps ax | grep nginxを実行すると先ほどと同じように

45538 ?? Ss 0:00.00 nginx: master process nginx 45539 ?? S 0:00.00 nginx: worker process 45622 s000 S+ 0:00.01 grep nginx

となるのですがnginx -s stopを実行するとnginx: [alert] kill(45538, 15) failed (1: Operation not permitted)となるのですがなぜプロセスを止められないのでしょうか?また上記の二つの起動方法の違いはなんでしょうか?

やったこと

stopとkillの違いがよくわかりませんでしたが、エラーにkillという単語が出てきた上、killでプロセスを止めてる記事も多かったためkill -KILL 45538などしてみましたが今度はkill: kill 45538 failed: operation not permittedと言われてしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/10/08 17:23

brew services start nginx で起動したら brew services stop nginx で止めると良いのでは。 また、brew では sudo しないのが一般的かと…。
cunwe

2021/10/09 04:18

ご回答いただきありがとうございます。 brew services stop nginx を実行した後、 Stopping `nginx`... (might take a while) ==> Successfully stopped `nginx` (label: homebrew.mxcl.nginx) と表示されたのですが、続けてps ax | grep nginx で確認すると 45538 ?? Ss 0:00.00 nginx: master process nginx 45539 ?? S 0:00.00 nginx: worker process 49781 s000 R+ 0:00.01 grep nginx と出力され、まだ残ってしまっているようなのですがどうしたらよろしいでしょうか?
guest

回答1

0

ベストアンサー

operation not permittedとなっているので、おそらく権限がないのかと。

sudoをつけて起動しているからroot権限になっちゃっているのではないでしょうか?
なので、停止コマンドやkillコマンドもsudoをつけて停止すれば止まりそうな気がします。

投稿2021/10/09 01:06

ukyoda

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cunwe

2021/10/09 06:06 編集

ご回答いただきありがとうございます。sudo kill -KILL 45538で消せました。 停止コマンドとkillコマンドの違いを教えていただけますでしょうか?また、調べてみると起動スクリプト(?)を使う方法とnginxコマンドを使う方法があるみたいなのですが、どう使い分けたらよろしいでしょうか?(brew services start nginx が前者でnginx が後者ですか...?)
ukyoda

2021/10/09 11:04

それぞれのコマンドは役割が違います。 ・nginx -s stop nginxを停止するためのコマンド。 ・brew services {start|stop} {service名} brew servicesで管理可能なサービスを操作するためのコマンドです。 nginxに限らず、mysqlやredisといったサービスも、homebrewでインストールしていれば このコマンドで操作ができます。 ・killコマンド killコマンドは「指定したプロセスを停止するためのコマンド」です。プロセスIDを指定すればnginx以外の実行中のプログラムでも停止させることができます。 ただ、このコマンドはプロセスを停止させるというよりは、プロセスを「強制終了」させるためのコマンドですので、むやみやたらに使わないほうが良いです。
cunwe

2021/10/09 12:35 編集

ご回答いただきありがとうございます。 ということは、nginxを止める目的で使う場合はnginx -s stopとbrew services stop nginxは同じということでしょうか? またkillコマンドについてですが、masterプロセスとworkerプロセスそれぞれ別々に消せてしまったのですがこれはまずいのでしょうか?昆虫の頭だけ取ってしまって胴体が動いてるみたいな感覚なのですが、kiiコマンドで消すときは2つとも同時に消したほうがよろしいでしょうか?
ukyoda

2021/10/09 15:38

> ということは、nginxを止める目的で使う場合はnginx -s stopとbrew services stop nginxは同じということでしょうか? 「nginxを停止する」という処理の結果は同じになるかもしれませんが、これらは別のコマンドです。そして、`nginx`コマンドでnginxを起動したのなら`nginx -s stop`で、`brew services start nginx`でnginxを起動したのであれば、`brew services stop nginx`で停止するべきだと私は思います。 `brew services start nginx`は、nginxを`brew services`から実行し、そのプロセスを管理するコマンドです。そのため、`brew services start nginx`は、nginxを起動する処理以外に、そのプロセスを管理するために何らかの処理が行なわれていると思います。そして、もしかするとその、「プロセスを管理するための何らかの処理」は、停止時に何らかのクリーンアップ処理をしないといけないかもしれません。 このとき、`nginx -s stop`はただnginxを停止するためのコマンドなので、この「プロセス監視のための処理」のクリーンアップは実行されません。クリーンアップを行うには`brew services stop nginx`を実行するべきです。 > またkillコマンドについてですが、masterプロセスとworkerプロセスそれぞれ別々に消せてしまったのですがこれはまずいのでしょうか?昆虫の頭だけ取ってしまって胴体が動いてるみたいな感覚なのですが、kiiコマンドで消すときは2つとも同時に消したほうがよろしいでしょうか? 基本、killコマンドで消すことは行わないようにしたほうがいいですね。 理由としてはおっしゃる通り、「昆虫の頭だけ取ってしまって胴体が動いてる」状態、つまり masterは停止したけどworkerは動いたままであるとか、はたまたその逆の現象が起こったりと、 本来nginxが望んでいるであろう正常な状態で終了していないからです。 回答が長々となりましたが大丈夫でしょうか? 一応、上記の話を整理すると、こうなります。 ・起動と終了のコマンドはちゃんと対になるコマンドで行いましょう。  ・`nginx`コマンドでnginxを起動した場合    → `nginx -s stop`で停止する  ・`brew services start nginx`でnginxを起動した場合    → `brew services stop nginx`で停止する ・`kill`コマンドは原則使わない
cunwe

2021/10/09 17:26

ご回答いただきありがとうございます。 `nginx`コマンドと`brew services start|stop nginx`コマンドは対になっているので目的に合わせて使い分けるようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問