ExpressでNode JSを使用していて、スクリプトを実行しようとしていて、そのスクリプトの出力をAJAX経由でクライアントに返しています。スクリプトは正常に完了していますが、何らかの理由で出力がポストレスポンスに表示されません。ノードJSの子プロセスからの出力で応答できないのはなぜですか?
let childProcess = require('child_process');
router.post('/update', (req, res) => {
childProcess.exec('/home/dir/app/update.sh', { shell: '/bin/bash' }, (error, stdout, stderr) => {
res.json({ error, stdout, stderr });
});
});
ノードプロセスは、Foreverを使用して実行されます。私は永遠にログを見れば、それは示しています
永遠に検出されたスクリプトがシグナルによって殺された:SIGKILL
それが何を意味するのかわかりません。しかし、スクリプトは正常に完了しているようだ。
EDIT 下記のアイコンの回答にお答えください。私は次のことを試みたが、まだ行っていない。
router.post('/update', (req, res) => {
console.log('start...');
childProcess.exec('/home/dir/app/update.sh', { shell: '/bin/bash' }, (error, stdout, stderr) => {
console.log('done');
error = error || '';
stdout = stdout || '';
stderr = stderr || '';
res.json({ error, stdout, stderr });
});
});
は、コンソールで「完了」ログに記録したことがないので、成功関数が発射されることはありませんかのようです。上記の "start ..."とSIGKILLエラーがコンソールに記録されます。
あなたは[EXECFILE](https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback)それが何のファイル –
なので 'のように見えるupdate.sh'使用することを検討する必要がありますか?あなたのコードは単純なbashスクリプトで私のために働きます。 (あなたが言及しなかった他のルートがない限り) – Will
ここにupdate.sh、shebangの上の行があります。#!/ bin/bash、git pull、npm install、 npmはビルドを実行し、永遠にrestartallします。 – wayofthefuture