Node.js pm2几乎每秒都在重启

时间:2016-05-10 17:45:45

标签: node.js azure express coffeescript pm2

我在Azure服务器上部署了一个express.js应用程序。我使用pm2进行流程管理。

问题是pm2几乎每秒都会重启。

using System;
using System.CodeDom.Compiler;
using System.IO;
using Microsoft.CSharp;

namespace myForm
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var foo = new CSharpCodeProvider())
            {
                var parameters = new CompilerParameters
                {
                    GenerateInMemory = true,
                    GenerateExecutable = false
                };

                parameters.ReferencedAssemblies.Add("System.dll");
                parameters.ReferencedAssemblies.Add("System.Core.dll");
                parameters.ReferencedAssemblies.Add("System.Drawing.dll");
                parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");

                var source = File.ReadAllText("form.txt");
                CompilerResults results = foo.CompileAssemblyFromSource(parameters, source);
                Type type = results.CompiledAssembly.GetType("myForm.Form1");
                object compiledObject = Activator.CreateInstance(type);

                // Execure test function from dynamically compiled form
                type.GetMethod("test").Invoke(compiledObject, new object[] { });
            }
        }
    }
}

〜/ .pm2 / pm2.log

using System.Windows.Forms;

namespace myForm
{
    public partial class Form1 : Form
    {
        public static int _testVar = 0; // how can i get this var value?
        public Form1()
        {
            InitializeComponent();
        }

        public void test()
        {
            MessageBox.Show("test");
        }
    }
}

namespace myForm
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // richTextBox1
            // 
            this.richTextBox1.Location = new System.Drawing.Point(12, 12);
            this.richTextBox1.Name = "richTextBox1";
            this.richTextBox1.Size = new System.Drawing.Size(260, 204);
            this.richTextBox1.TabIndex = 0;
            this.richTextBox1.Text = "";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(12, 222);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(260, 40);
            this.button1.TabIndex = 1;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 274);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.richTextBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.RichTextBox richTextBox1;
        private System.Windows.Forms.Button button1;
    }
}

我在我的应用程序中使用咖啡脚本。并使用staging@Server:/srv/apps/myapp/current$ pm2 list ┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ app │ 0 │ fork │ 35428 │ online │ 0 │ 0s │ 20.465 MB │ disabled │ └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app staging@Server:/srv/apps/myapp/current$ pm2 list ┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ app │ 0 │ fork │ 35492 │ online │ 7 │ 0s │ 59.832 MB │ disabled │ └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app staging@Server:/srv/apps/myapp/current$ pm2 list ┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ app │ 0 │ fork │ 35557 │ online │ 13 │ 0s │ 21.816 MB │ disabled │ └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

启动应用

的package.json

2016-05-10 17:39:34: Starting execution sequence in -fork mode- for app name:start id:0
2016-05-10 17:39:34: App name:start id:0 online
2016-05-10 17:39:35: App [start] with id [0] and pid [3149], exited with code [255] via signal [SIGINT]
2016-05-10 17:39:35: Starting execution sequence in -fork mode- for app name:start id:0
2016-05-10 17:39:35: App name:start id:0 online
2016-05-10 17:39:35: App [start] with id [0] and pid [3158], exited with code [255] via signal [SIGINT]
2016-05-10 17:39:35: Starting execution sequence in -fork mode- for app name:start id:0
2016-05-10 17:39:35: App name:start id:0 online
2016-05-10 17:39:36: App [start] with id [0] and pid [3175], exited with code [255] via signal [SIGINT]
2016-05-10 17:39:36: Starting execution sequence in -fork mode- for app name:start id:0

我是node.js的新手。可能是我没有看到明显的。请帮帮我。

6 个答案:

答案 0 :(得分:6)

日志对于理解问题没有用。

要了解失败并继续前进,您应该尝试在遥控器上手动启动应用程序。

IE键入类似npm run startnode path/yo/your/bin.js

的内容

它应该为您提供缺失的信息来解决问题并继续前进。

答案 1 :(得分:3)

检查您的应用是否修改了项目文件夹中的文件(例如日志文件)。如果启用watch标志,则对任何文件的更改将触发重启。

要防止这种情况发生,请使用process文件并在其中添加watch_ignore标记。

以下是有关如何使用流程文件的文档: PM2 - Process File

答案 2 :(得分:1)

我们也遇到了类似的问题,其中pm2几乎每秒都重启一个启动node.js Web应用程序的进程。

我们发现MongoDB没有运行,然后Web应用程序会在启动时尝试连接到数据库,但会失败。这会提示pm2反复重启进程,导致每秒重启。

如果这是您的问题,请尝试使用mongodmongod --dbpath [your db path]启动MongoDB?

答案 3 :(得分:1)

如果已使用NPM打包并启动了应用程序,则适用。

我只需要更改生态系统.configure.js中的“脚本”文件(如果使用,则更改为json文件)。 app.js无法正常工作,我不得不将其替换为./bin/www,然后才能正常工作。

答案 4 :(得分:1)

我知道这有点晚了,但对于滚动浏览此内容的任何人,经过数小时的研究,我找到了实际的解决方案。

所以我想分享这个发现的备忘单:https://devhints.io/pm2

pm2 start app.js --no-autorestart

答案 5 :(得分:0)

请务必查看日志以查找问题所在(pm2 describe {process}将向您显示它们的保存位置)。另外,通过停止pm2进程并手动运行应用程序(即npm run start),看看是否可以在不使用pm2的情况下运行express应用程序。

如果您可以手动运行该应用程序,但不适用于pm2,则可能是该应用程序未从正确的目录运行(您可以使用pm2 cwd参数对其进行修改)。

另一个常见问题是未设置正确的环境变量,因此请检查json或ecosystem file。您还可以查看pm2与pm2 prettylist一起运行的环境。