問題タブ [daemons]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Ruby の「デーモン化された」スクリプトで予期しない問題が発生する
ここにあるスクリプトの動作が突然変化しましたが、その理由がわかりません。私の知る限り、スクリプトは変更されておらず、ルビーや宝石も変更されていません。
まず、スクリプトは次のとおりです。
スクリプトは「run.rb」と呼ばれ、パスは /var/www/main/projects/systems/background です。このスクリプトは、「メイン」フォルダーにある 2 つの異なる bash スクリプトによって呼び出されます。'background_restart.sh' と呼ばれる最初のものは、次のように Ruby インタープリターと完全修飾名を呼び出します。
これは失敗し、端末にのみ 'Terminated' を出力します。「deploy.sh」と呼ばれるもう 1 つのスクリプトは Web アプリケーションをデプロイし、同じ出力で失敗します (最初と最後のコマンドはそれぞれ停止と開始です)。
これが突然失敗し始めた理由については説明がありません。
その他の注意事項:
- バックグラウンドディレクトリにいる場合、ターミナルでスクリプトの完全修飾パスを呼び出すと機能します。
- bashスクリプトのディレクトリを「バックグラウンド」に変更すると、最初は問題が解決されたように見えますが、私には少し満足できません。
- 展開すると、さらに問題が発生します。
deploy スクリプトは基本的に、現在の本番コードを別のディレクトリに移動し、更新されたコードをその場所に配置します。再起動すると、「run.rb」スクリプトが「background」に「var」フォルダーを再作成することが期待されますが (24 行目)、デーモンの gem で次のエラーが発生します。
これで、ターミナルに 'var' フォルダーを作成して再度実行するだけで、これを修正できます。単にハッキングしたくないということです。ここで何が起こったのかを解明し、以前の状態に戻そうとします!
ruby - Daemons Ruby gem を使用した戻りコードの開始/停止
サーバーとして実行する必要があるコードをいくつか作成し、それを Daemons as でラップしましたDaemons.run('myserver.rb')
。動作するように実行しても./daemon.rb start
、まったく有益ではありません。つまりmyserver.rb
、例外がスローされた場合、サーバーが起動していないことさえわかりません。デーモンは終了コード0で終了します。デーモンに非を返すように指示する方法はありますか-ラップされたスクリプトが起動に失敗した場合、終了コードはありませんか? または、サーバーが正常に起動したかどうかを知る別の方法はありますか?
django - celeryd および celerybeat pid ファイルが作成されず、ワーカーが開始されませんが、出力は OK と表示されます
私は celeryd と celerybeat をデーモンとしてセットアップしました。しかし、しばらくしてから、ワーカーを起動せず、pid ファイルを作成しません。
これが私のもの/etc/default/celeryd
です:
init.d
スクリプトは次のとおりです。
また、ドキュメントsh -x /etc/init.d/celeryd start
で提案されているように、次のコマンドで init スクリプトを実行しました。これが出力です。
次に、pids dir を確認すると、空であり、ps aux
アクティブなプロセスがないと表示されます。ログにも何もありません。私はvirtualenvを使用していません。機能しなくなりました。のバージョンdjango-celery
は3.0.21
. これが私のwsgi
スクリプトです:
そして、これは私の djcelery 関連の設定です:
お願いします、どんな提案でも本当に感謝します!!!! 前もって感謝します...
daemons - ruby gem Daemons でログ出力のオプションを設定するにはどうすればよいですか?
Daemons 1.1.9 を使用しています。デーモンのログをログ ファイルに記録できません。私のデーモン制御ファイルは次のとおりです。
pids と log ディレクトリはどちらもルート フォルダから 1 つ下にあり、pid ファイルは正常に書き込まれているため、ディレクトリ/ディレクトリ モードの指定ミスではないことがわかります。ファイル myserver.rb.log および myserver.rb.output はログ ディレクトリにあります。私は何を間違っていますか?前もって感謝します。
hadoop - Hadoop: デーモンを起動できない
疑似分散 Hadoop 構成でデーモンを起動できません。次のコマンドを入力します。
sudo bin/start-all.sh
パスワードの入力を求めるプロンプトが表示されますが、一度入力すると、このエラー メッセージが表示されます
chown コマンドを使用して、hadoop の所有権をローカル ユーザーに変更しようとしました。ただし、この厄介なエラーはまだ発生しています。そして、このスクリプトをルートモードで呼び出そうとしています。
ここでどこが間違っていますか?どこでもオンラインで検索しましたが、私の質問に答えるのに十分な Hadoop の経験がないようです。
あなたの応答は本当に感謝しています..
hadoop - データノードが起動しない
Hadoop データノードの起動に問題があります。できる限りの調査を行いましたが、問題の解決に役立つ方法はありませんでした。を使用して起動しようとしたときの端末コンソールの出力は次のとおりです
これが起こることです:
ご覧のとおり、DataNode は開始を試みますが、その後シャットダウンします。その間ずっと、NameNode の起動に問題がありました。以前は、手動で開始してこれを修正していました
そして今、問題は DataNode にあります。この問題を解決するために、皆様のご協力をお願いいたします。
そして、もう 1 つの一般的な質問です。Hadoop がこのように一貫性のない動作を示しているのはなぜですか。*-site.xml の設定を変更していないことは確かです。
unix - シグナルと waitpid の共存
次の質問があります: SIGCHLD にシグナルハンドラを使用し、特定の場所で代わりに waitpid(3) を使用できますか?
これが私のシナリオです: ソケットをリッスンするデーモン プロセスを開始します (この時点では、それが TCP ソケットか UNIX ソケットかは関係ありません)。クライアントが接続するたびに、デーモンは要求を処理するために子を fork し、親プロセスは着信接続を受け入れ続けます。リクエストを処理する子は、ある時点でサーバー上でコマンドを実行する必要があります。この例で、次のようなコピーを実行する必要があると仮定しましょう:
そのために、clild は execl(3) (または execve(3) など) を使用して copy コマンドを実行する新しいプロセスを fork します。
コードをより適切に制御するために、コピーを実行している子プロセスの終了ステータスを waitpid(3) でキャッチすることが理想的です。さらに、私のデーモン プロセスは要求を処理するために子プロセスをフォークしているため、ゾンビ プロセスが作成されないように、SIGCHLD のシグナル ハンドラが必要です。
私のコードでは、signal(3) を使用して SIGCHLD のシグナル ハンドラをセットアップし、2 回 fork してプログラムをデーモン化し、ソケットで受信接続をリッスンし、プロセスを fork して、着信する各リクエストと子プロセスのフォークを処理します。コピーを実行する孫プロセスで、waitpid(3) を介して終了ステータスを取得しようとします。
何が起こるかというと、孫プロセスが終了すると、waitpid(3) がアクションを実行し、孫プロセスが成功して終了したにもかかわらず、waitpid(3) が -1 を返す前に、ハンドラによって SIGCHLD が捕捉されます。
私の最初の考えは、追加することでした:
接続しているクライアントを処理するために子プロセスをフォークする直前に、成功しませんでした。SIG_IGN を使用しても機能しませんでした。
私のシナリオを機能させる方法についての提案はありますか?
事前にご協力いただきありがとうございます。
PS。コードが必要な場合は投稿しますが、サイズが大きいため、必要な場合にのみ投稿することにしました。
PS2。私の意図は、私のコードを FreeBSD で使用することですが、私のチェックは Linux で実行されます。
編集[解決済み]:
私が直面していた問題は解決されました。「予期しない」動作は、ある時点でバグがあった私の waitpid(3) 処理コードが原因でした。
したがって、上記の方法を実際に使用して、デーモンのようなプログラムで signal(3) と waitpid(3) を共存させることができます。
この方法が、そのようなことを達成したい人に役立つことを願っています!