私は使う無料BSD Unixそしてそのrc
スクリプトシステムを起動するとNode.jsサーバーは、再起動時にデーモンで始まり、再びデーモンで始まり、FreeBSD UNIXユーザーアカウントにログインした後、システムによって提供されたいくつかのコマンドを使用してサーバーを停止します。
私が読んでマニュアルの関連部分/etc/rc.d/my_script
そしてそれに関する記事では、私はそれぞれに次のスクリプトと設定を書いています/etc.rc.conf
。これは私が説明したように動作します。別のサービスに別のスクリプトを追加すると、そのうちの1つだけが機能し、通常は2番目のスクリプトが機能すると思います。各サーバーは、異なるポート番号を受信するようにコーディングされています。
my_script_1
すべてに対して実行可能です'-rwxr-xr-x'
。
/etc/rc.d/my_script_1
:
#!/bin/sh
. /etc/rc.subr
name=my_service_1
rcvar=${name}_enable
project_dir="/usr/home/ec2-user/dev/projects/my_project_1"
command="/usr/local/bin/node"
command_args="${project_dir}/index.js"
load_rc_config $name
run_rc_command "$1"
/etc.rc.conf
varセットの有効化を含む:
my_service_1_enable="YES"
rc.conf
名前が別のものに変更された項目などの別のスクリプトや項目を追加すると、そのうちのmy_service_2
1つだけが機能します。my_script_2
また実行可能です。
私は何を見逃していますか?同時に動作させるにはどうすればよいですか?
ベストアンサー1
書くとき「通常」これは競争条件のように聞こえます。どのインスタンスが生き残るかはランダムです。
rcスクリプトで実行したい操作には基本的な問題はありません。 rcスクリプトはコマンドのみを実行します。ただし、開始する項目は複数のインスタンスで実行できる必要があります。 rcシステムはそれを行うためにそれ自体で魔法の仕事をしません。
説明によれば、プロジェクト 1 と 2 の一部が同じリソースを使用しているため、node.js インスタンスを 1 つだけ実行できると推測されます。たとえば、同じポートにバインドされた2つのプロジェクトがあります。 2つのインスタンスが同じポートでサービスを提供できないため、最初に起動されたインスタンス(レース)のみが生き残ります。
この問題をデバッグするには、まず複数のインスタンスが正しく処理されていることを確認してください。起動スクリプトを無効にしてみてください。それから始めましょう両方また、プロジェクトを手動で作業します。
まず、次を実行します。
/usr/local/bin/node /usr/home/ec2-user/dev/projects/my_project_1/index.js
それから:
/usr/local/bin/node /usr/home/ec2-user/dev/projects/my_project_2/index.js
ノードがSTDOUTに出力され、エラーがSTDERRに移動した場合、何が間違っているかを確認する方が簡単です。私はあなたの問題がここにあると確信しており、出力はさらなる調査に役立ちます。
上記の方法が機能する場合(疑わしいのとは対照的に)、起動スクリプトの起動ノードプロセスからログ出力を取得する必要があります。 Node.jsがファイルやシステムログに記録しないようです。これは、rcスクリプトを手動で起動しようとすると、画面にエラー出力が表示されることを意味します。したがって、以下を使用してrcスクリプトを制御してみてください。
service my_service_1 start
ロギングの詳細については、以下を確認してください。nodejsログファイルはどこにありますか?。
メモ:/etc/rc.d/your_script
基本システムで動作する独自のスクリプトを使用しています。スクリプトをに入れる必要があります/usr/local/etc/rc.d/your_script
。service
コマンドは両方の場所を検索するので、同じように動作します。どちらも変更する必要はありません/etc/rc.conf
。