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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

2303閲覧

Nodeを停止させたい

k.t.est

総合スコア49

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/09/24 01:00

編集2020/09/25 06:34

WebSocketでチャット機能を実装しております。
nodejsのプログラムの内容を改修するためにノードサーバーを停止・再起動させようとしたのですが、停止させることができません。
現状チャット機能が動いている為、ノードサーバーが起動していると考えられるのですが、コマンドライン上でnodeプロセスが見つからない状況です。
停止方法につき、ご教示戴ければ幸甚です。

なお、コマンドライン上で「node xxxx.js」とコマンドしてノードサーバーを起動したわけではない為、foreverなどを利用していると思われるのですが、その部分も不明です。

#試したこと

//コマンドライン $top //nodeプロセス見つからず $ps -e | grep node //何もヒットしない $forever list // No forever processes running $pm2 --help //pm2: コマンドが見つかりません $nodemon --help //nodemon: コマンドが見つかりません $sudo reboot // 再起動しても状況変わらず

#環境
node : v10.15.3
OS : amazon linux2

#追記
チャット機能のサーバー構築部分の記述です。

node

1var http = require('http'); 2var server = http.createServer(); 3var cookie = require('cookie'); 4var subscriber = require('redis').createClient(xxx, 'xxxxxxx'); 5 6// TCP接続 7var socketio = require('socket.io'); 8var io = socketio.listen(server); 9 10server.listen(xxxxx);

#追記2

$systemctl list-unit-files --type=service //実行結果 UNIT FILE STATE acpid.service enabled amazon-ssm-agent.service enabled amzn2-early-relabel-modules.service enabled arp-ethers.service disabled atd.service enabled auditd.service enabled auth-rpcgss-module.service static autovt@.service enabled blk-availability.service disabled brandbot.service static chrony-dnssrv@.service static chrony-wait.service disabled chronyd.service enabled cloud-config.service enabled cloud-final.service enabled cloud-init-local.service enabled cloud-init.service enabled codedeploy-agent.service enabled console-getty.service disabled console-shell.service disabled container-getty@.service static crond.service enabled

#追記3
試しにEC2のセキュリティグループで3000ポートを外したところ、チャットは使用できました。
また、ロードバランサーの3000ポートのトラフィック先のターゲットグループからインスタンスを外してみた(ターゲットグループが空の状態)のですが、これでもチャットが使用できました。

→ ロードバランサーのリスナーの設定が間違っており、修正したところ、下記のようになりました。
ターゲットグループが空の状態 : チャット利用できない。
3000ポートのセキュリティグループを外した状態 : チャット利用できない。

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

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

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

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

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

maisumakun

2020/09/24 01:07

> なお、コマンドライン上で「node xxxx.js」とコマンドしてノードサーバーを起動したわけではない為、foreverなどを利用していると思われるのですが、その部分も不明です。 まずは、どうやって起動しているか特定してください。
k.t.est

2020/09/24 01:08

大変恐れながら、その部分についてどのようにすれば特定できるかをご教示戴ければ幸甚です。
maisumakun

2020/09/24 01:10

サーバはどのように構築したのですか?
k.t.est

2020/09/24 01:19

追記にnode.jsのプログラムを記載させていただきましたが、こちらでご質問内容に回答差し上げる形になっておりますでしょうか?
maisumakun

2020/09/24 01:20

> チャット機能のサーバー構築部分の記述です。 いえ、そういう意味ではなくて、EC2のインスタンスを作成してからサーバを動作する状態までに、どのような操作を行っていったのか、という意味合いです。
k.t.est

2020/09/24 01:30

webサーバーはnginx/1.12.2を利用しています。あとはphp7.4とnodeをインストールしています。 また、EC2にはロードバランサー(ALB)経由で接続するようになっております。 差し上げている情報が全く不足しているという認識はあるのですが、知識不足で何をお伝えすればいいのか分からず大変申し訳御座いません。
maisumakun

2020/09/24 01:35

えっと、誰か別人が構築したものを引き継いで、どのように動いているかの情報が乏しい…というような状況でしょうか?
k.t.est

2020/09/24 01:38

仰られる通りで御座いまして。。。私自身もそこまで詳しくないため苦戦をしております。他にどのような情報が必要そうか御指南頂けましたら、調べることはできるかと思いますので、ご教示いただけないでしょうか??
maisumakun

2020/09/24 01:41

Node.jsが動いているポート番号が分かれば、そこから待ち受けているプログラムを調べる方法があるかと思います・
k.t.est

2020/09/24 01:45

ありがとう御座います。server.listenしているのは3000番ポートになっていますので、ここで動いているものと存じます。
maisumakun

2020/09/24 02:26

チャット機能がWebSocket+Nodeで動いている、というのは間違いないのですか?
k.t.est

2020/09/24 02:30

websocket + nodeで動いているのは間違いないものと思われます。 Clientサイドのプログラムをいじってsocketで拾った情報をconsole.logしたところ、node.jsで書かれているプログラムの内容が送られてきておりました。 (さらにservice workerも実装されております。)
maisumakun

2020/09/25 05:50

> また、ロードバランサーの3000ポートのトラフィック先のターゲットグループからインスタンスを外してみた(ターゲットグループが空の状態)のですが、これでもチャットが使用できました。 えっと、ロードバランサーで受けていたのですか? (流し先はどこになっていましたか?)
k.t.est

2020/09/25 05:55

ロードバランサーで受けておりまして、通常のアクセス先(httpアクセス)と同じインスタンスでした。80番と3000番で同じインスタンスに流しておりました。
maisumakun

2020/09/25 05:56

> また、ロードバランサーの3000ポートのトラフィック先のターゲットグループからインスタンスを外してみた(ターゲットグループが空の状態)のですが、これでもチャットが使用できました。 チャットサーバーのコードは存在するけど全く使われていない(もちろん起動していなくても問題はない)、ということかもしれません。
k.t.est

2020/09/25 06:14

クライアント側のコードを見ると、socket.io/socket.io.jsを読み込んで、var socket = io.connect(ドメイン:3000)となっており(ドメインの先は今のインスタンス)、その後socket.onで送信された内容を受け取っているのですが、これでなぜ3000ポートのセキュリティグループを外しても通信可能なのかがよく分かりません。現状3000ポートは一切使用せずにチャット通信を行なっているということでしょうか??
maisumakun

2020/09/25 06:15

> 現状3000ポートは一切使用せずにチャット通信を行なっているということでしょうか?? その可能性もあります。
k.t.est

2020/09/25 06:37

追記3に書かせて頂いたのですが、今回テストサーバーでプログラム修正を行なっていたのですが、ロードバランサーのリスナーが間違っており、3000ポートの接続先が本来テストサーバーであるべきものが、本番サーバーとなっておりました。
guest

回答2

0

自己解決

maisumakun様、yu_1985様、大変有難う御座いました。
ロードバランサーのリスナーの設定を正しくしたことで、nodeサーバーが停止できました。
恐らくですが、テスト環境内のnodeサーバーはずっと停止状態にあって、本番環境内のnodeサーバーは稼働しており、ロードバランサーの流し先が本番環境であった為に、テスト環境内でチャット機能が利用できたという状況でした。

投稿2020/09/25 06:49

k.t.est

総合スコア49

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

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

0

下記が参考になりそうな気がします。
意図せず動作している Node.js のプロセスを確実に停止するには?

とりあえず

sudo lsof -i:3000

で何が動いてるのかを調べることと、
合わせて貼ったstackoverflowにも書いてあるServiceWorker問題についても調べてみることかなと。

投稿2020/09/24 02:08

yu_1985

総合スコア7427

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

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

k.t.est

2020/09/24 02:24

ご教示ありがとう御座います。sudo lsof -i:3000を実行しましたところ、何も表示されませんでした。おそらくご教示いただいたリンクにあるservice workerが原因と思われる(チャット機能を実装しているアプリではserviceworkerも実装しております)のですが、service workerをunregisterしても状況が変わらずでした。
k.t.est

2020/09/24 05:01

node.jsのプログラムのserverがlistenしていること、クライアントサイドで3000ポートのsocket.jsを読み込んでいること、EC2のセキュリティグループで3000ポートを許可していることを考えると3000でlistenしていることは間違いなさそうです。 foreverはlistしてもプロセスなしと表示され, pm2, StrongLoop PMはいずれもインストールされていない状態でした。
k.t.est

2020/09/24 05:08

ちなみにチャットを利用すると、topで見ているとチャットを使った一瞬だけnodeプロセスが現れるような状態になっており、その後ps -e | grep nodeをしても何もヒットしないという状態です。 ちょうどtopで見ながら、チャットを打って、表示された瞬間にps -e | grep nodeとしたところ、 ps -e | grep node 10701 ? 00:00:00 node 10703 ? 00:00:00 node となりました。その後同じコマンドを打っても何も表示されません。
maisumakun

2020/09/24 05:16

本当に「その瞬間だけサーバが起動している」から、普段から常駐しているものなどなかった、ということはありませんか?
k.t.est

2020/09/24 05:34

ご指摘有難う御座います。 上記2つのnodeプロセスをps auxで解析したところ、service workerでプッシュ通知を行うために、phpからnohupコマンドでnodeを実行させているもので御座いました。 php内のnohupでコマンドを実行しているところを削除したところ、チャットを利用するのと同時にps aux | grep nodeとコマンドしたところ、 ps aux | grep node user 11923 0.0 0.1 119436 932 pts/0 S+ 14:28 0:00 grep --color=auto node のみとなりました。 その為、チャットを打った際にnodeを起動してということでは無いように感じております。
yu_1985

2020/09/24 05:40

> チャットを利用するのと同時 都度動いているものだとするとその瞬間だけpsコマンドを打つのは人間には不可能に近いと思いますが…。 チャット部分だけではなくて他の部分で何かモジュールを使ってませんか。 expressとか。
k.t.est

2020/09/24 06:19

確認してみたのですが、nodeで書かれている部分は、チャットの部分とservice workerの部分だけでした。チャット部分では何も使われていなかったのですが、service workerの部分でworkboxが使われておりました。
maisumakun

2020/09/24 06:20

Service Worker自体はブラウザ内で動きます。サーバサイドではありません。
k.t.est

2020/09/24 07:02

そうですよね、サーバーサイドで記載されているのは、チャットの部分しかなく、expressなどのフレームワークは使用されていない状況で御座いました。
maisumakun

2020/09/24 07:05

AWS側でWebSocketを受け止めて変換している、ということはありませんか?
k.t.est

2020/09/24 07:07

申し訳ございません、「受け止めて変換している」という部分につき、具体的にどんな方法がありますでしょうか?ご教示いただけると大変助かります。
yu_1985

2020/09/24 07:14

> 上記2つのnodeプロセスをps auxで解析したところ、service workerでプッシュ通知を行うために、phpからnohupコマンドでnodeを実行させているもの このphpがどのように動いてるかが関係してこないでしょうか? また、systemdに何かしらそれっぽいサービスはないでしょうか https://qiita.com/you21979@github/items/588bddb59378ce7303a2
k.t.est

2020/09/24 07:54

ご指摘有難う御座います。 phpでのプログラムを再度見返してみました。既に除外したservice workerのpush通知プログラムのキックを除くと、チャットの内容をDBに格納し、redisサーバー(Elasticache)にpublishする形になっております。 チャットプログラムのchat.jsでは、redisサーバーにアクセスし、io.emitでクライアントに送信するという形になっておりました。 systemdについてですが、確認してみたのですが、/etc/systemd/system/の配下にはdefault.targetファイルがあり、あとはphp-fpm.service.dなどのフォルダがありました。配下のファイルを全てチェックしてみましたが、どのファイルも初期のままで触った形跡もありませんでした。 合わせて grep -irl node /etc/systemd/system/(各フォルダ)/* を実行しても何も結果が表示されませんでした。
yu_1985

2020/09/24 08:09

systemdにサービスを作成したのであれば、その名前にnodeが入るとも限りません。 また、 /etc/systemd/system/ 配下に直接serviceの定義ファイルを置いているケースもままあります。 その中を見るより、systemctlコマンドでサービスのリストを出したほうが確実です。
k.t.est

2020/09/24 08:28

ご教示有難う御座います。追記2にsystemctlコマンドでリストした結果を掲載させて頂きました。 怪しそうなもの御座いますでしょうか?
yu_1985

2020/09/25 03:53

明らかに少なすぎるのですが、本当にこれで全部ですか?
k.t.est

2020/09/25 04:05

申し訳ございません、最後の1行のcrond.serviceが抜けておりました。 $systemctl list-unit-files --type=serviceのコマンドで表示されたものはこれで全てで御座いました。。。 他にもリストするコマンドは御座いますでしょうか??
yu_1985

2020/09/25 05:42

いえ、それにしたって少なすぎるのですが…。 結果はlessコマンドを使った時のようにスクロールできるはずですが、それを見られてないのでは?
k.t.est

2020/09/25 05:58

有難う御座います。仰られる通り、スクロールに気がつきませんでした。質問本文に書いたところ、文字数オーバーで記載できませんでしたので、こちらに記載致します。 dbus-org.freedesktop.hostname1.service static dbus-org.freedesktop.import1.service static dbus-org.freedesktop.locale1.service static dbus-org.freedesktop.login1.service static dbus-org.freedesktop.machine1.service static dbus-org.freedesktop.timedate1.service static dbus.service static debug-shell.service disabled dm-event.service static dmraid-activation.service enabled dracut-cmdline.service static dracut-initqueue.service static dracut-mount.service static dracut-pre-mount.service static dracut-pre-pivot.service static dracut-pre-trigger.service static dracut-pre-udev.service static dracut-shutdown.service static ec2-instance-connect.service disabled ec2net-ifup@.service static ec2net-scan.service disabled emergency.service static fstrim.service static getty@.service enabled gssproxy.service disabled halt-local.service static hibagent.service disabled hibinit-agent.service enabled htcacheclean.service static httpd.service disabled initrd-cleanup.service static initrd-parse-etc.service static initrd-switch-root.service static initrd-udevadm-cleanup-db.service static irqbalance.service enabled kmod-static-nodes.service static kpatch.service disabled libstoragemgmt.service enabled lvm2-lvmetad.service static lvm2-lvmpolld.service static lvm2-monitor.service enabled lvm2-pvscan@.service static mdadm-grow-continue@.service static mdadm-last-resort@.service static mdmon@.service static mdmonitor.service enabled messagebus.service static microcode.service enabled nfs-blkmap.service disabled nfs-config.service static nfs-idmap.service static nfs-idmapd.service static nfs-lock.service static nfs-mountd.service static nfs-rquotad.service disabled nfs-secure.service static nfs-server.service disabled nfs-utils.service static nfs.service disabled nfslock.service static nginx.service enabled php-fpm.service disabled plymouth-halt.service disabled plymouth-kexec.service disabled plymouth-poweroff.service disabled plymouth-quit-wait.service disabled plymouth-quit.service disabled plymouth-read-write.service disabled plymouth-reboot.service disabled plymouth-start.service disabled plymouth-switch-root.service static postfix.service enabled psacct.service disabled quotaon.service static rc-local.service static rdisc.service disabled redis-sentinel.service disabled redis.service disabled rescue.service static rhel-autorelabel-mark.service enabled rhel-autorelabel.service enabled rhel-configure.service enabled rhel-dmesg.service enabled rhel-domainname.service enabled rhel-import-state.service enabled rhel-loadmodules.service enabled rhel-readonly.service enabled rngd.service enabled rpc-gssd.service static rpc-rquotad.service disabled rpc-statd-notify.service static rpc-statd.service static rpcbind.service enabled rpcgssd.service static rpcidmapd.service static rsyncd.service disabled rsyncd@.service static rsyslog.service enabled selinux-policy-migrate-local-changes@.service static serial-getty@.service disabled snmpd.service disabled snmptrapd.service disabled sshd-keygen.service static sshd.service enabled sshd@.service static sysstat.service enabled systemd-ask-password-console.service static systemd-ask-password-plymouth.service static systemd-ask-password-wall.service static systemd-backlight@.service static systemd-binfmt.service static systemd-bootchart.service disabled systemd-firstboot.service static systemd-fsck-root.service static systemd-fsck@.service static systemd-halt.service static systemd-hibernate-resume@.service static systemd-hibernate.service static systemd-hostnamed.service static systemd-hwdb-update.service static systemd-hybrid-sleep.service static systemd-importd.service static systemd-initctl.service static systemd-journal-catalog-update.service static systemd-journal-flush.service static systemd-journald.service static systemd-kexec.service static systemd-localed.service static systemd-logind.service static systemd-machine-id-commit.service static systemd-machined.service static systemd-modules-load.service static systemd-nspawn@.service disabled systemd-poweroff.service static systemd-quotacheck.service static systemd-random-seed.service static systemd-readahead-collect.service enabled systemd-readahead-done.service indirect systemd-readahead-drop.service enabled systemd-readahead-replay.service enabled systemd-reboot.service static systemd-remount-fs.service static systemd-rfkill@.service static systemd-shutdownd.service static systemd-suspend.service static systemd-sysctl.service static systemd-timedated.service static systemd-tmpfiles-clean.service static systemd-tmpfiles-setup-dev.service static systemd-tmpfiles-setup.service static systemd-udev-settle.service static systemd-udev-trigger.service static systemd-udevd.service static systemd-update-done.service static systemd-update-utmp-runlevel.service static systemd-update-utmp.service static systemd-user-sessions.service static systemd-vconsole-setup.service static tcsd.service disabled teamd@.service static update-motd.service enabled
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問