如何解决在PM2下使用child_process执行bash脚本会导致该进程在脚本完成后重新启动
我建立了自己的Netlify。它回答了来自Github的webhook,并执行了一个bash脚本来部署一个可爱的React SPA。
它很好用,但是在PM2流程管理器环境下运行时,一旦子流程关闭/退出,它就会重新启动。我已经测试了很多东西-我什至已经建立了一个测试端点,该端点可以向其提供虚假数据,因为反复提交虚假部署变得很烦人。
以下是一些基本代码:
const childProcess = require('child_process');
async function processDeploy(deploy) {
console.log(`Processing commit: ${deploy.commit.id}...`);
childProcess.execFile('./deploy.sh',function (error,stdout,stderr) {
if (!error) {
// a function to report the result of the commit
postDeploy(stdout,stderr,deploy.commit,{ state: 'deployed' });
} else {
postDeploy('{}',error,{ state: 'error' });
}
});
}
我花了很长时间通过Node和PM2日志来查找...什么都没有。而且我认为部分原因是由于我怀疑实际上没有错误- PM2执行脚本,脚本在完成后退出,而PM2决定是时候终止该进程了。。
然后该进程重新启动,因为它设置为在kill / die上重新启动。
因此,在运行基于Express的应用程序时,PM2与npm start
有何不同?更重要的是,我该如何解决它...
在相关的情况下,这是我对PM2的ecosystem.config.js
:
module.exports = {
apps: [
{
name: 'App',script: 'bin/www',exec_mode: 'fork',instances: 1,autorestart: true,watch: false,ignore_watch: ['node_modules','.log'],max_memory_restart: '4G',},],};
更新:
我尝试了Node版本10、12和14。
我已经从child_process.execFile
切换到child_process.spawn
我调查了内存问题,并搜索了PM2的Github问题。
我现在确信PM2能够捕获子进程的事件并将其与父进程的事件混淆。
端子输出:
Deploy child process exited with code 0 and signal null // child process event listener for exit
Deploy child process closed with code 0 // child process event listener for close
Processing commit completed.
Queue empty.
Something is trying to kill me. // parent process event listener for SIGINT
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。