如何使用通用规范或元配置生成upstart和monit配置文件?

时间:2014-04-22 21:59:22

标签: node.js bash gruntjs upstart monit

我正在使用grunt将节点Web应用程序部署为upstart服务,并使用monit进行监控。但是:

  1. 我的upstart和monit配置相互重复了一点
  2. Upstart不会在env stanzas中进行变量扩展
  3. 我找不到动态配置monit的方法(ala upstart .override个文件)
  4. 我的问题

    这意味着我正在寻找一个可以用来生成uptstart .conf和monit conf.d / files的grunt插件或其他工具。你能帮我找一个(或建议一个更好的方法来运行我的节点网络应用程序)?

    一个相当粗糙的解决方案?

    老实说,upstart和monit文件的下划线模板可能已经足够了,如果没有现成的解决方案,那么我将把它包装成一个grunt插件,但这感觉就像一个问题其他人也一定要碰到,所以我想有一个解决方案,我找不到它。

    详细

    更详细地说明这三个问题。我的新贵conf文件看起来像这样:

    setuid node
    setgid node
    
    # ...
    
    script
        mkdir -p /home/node/.my-app
        echo $$ > /home/node/.my-app/upstart.pid
        /usr/local/bin/node /var/node/my-app/server.js >> /var/node/my-app/logs/console.log 2>&1
    end script
    
    # ...
    

    我的monit配置如下:

    check process node with pidfile /home/node/.my-app/upstart.pid
        start program = "/sbin/start my-app" with timeout 60 seconds
        stop program  = "/sbin/stop my-app"
        if failed host localhost port 17394 protocol http 
            and request "/monit.html"
            then restart
        if 3 restarts within 5 cycles then timeout
    

    如您所见,PID文件路径和配置目录在两者之间重复(问题1),我很乐意在monit文件中对主机,端口和请求URL进行参数化(问题3)。

    对于问题2(在upstart的env节中没有变量扩展,错误报告here),有几种解决方法适用于*脚本块中使用的变量,这些变量被解释为bash脚本,但它们似乎不适用于conf文件本身。我认为这使得无法在配置文件中指定应该运行的用户ID?

    我刚才提到的那些技巧:

    • Method 1:不要使用env - 将预脚本中的变量回显到文件中,然后再将其来源
    • Method 2:在需要的所有脚本体中复制变量扩展
    • Method 3:将变量存储在一个文件中并使用命令替换
    • 进行捕获

1 个答案:

答案 0 :(得分:3)

  

...或建议更好地运行我的节点网络应用程序

改为使用PM2 by Unitech

我使用PM2运行所有节点应用程序。它工作正常,易于配置。它具有自动生成启动脚本的内置功能。它为您提供记录,监控和易于维护。

这是展示亮点的good article

安装

npm install -g pm2

启动应用

pm2 start app.js

显示正在运行的应用

pm2 list

制作启动脚本

pm2 startup [ubuntu|centos|systemd]

readme on their github page

中的更多详细信息