用sudo开始与上帝节点

时间:2010-10-05 19:56:17

标签: monitoring node.js god

我需要以root用户(使用sudo)启动一个Node.js服务器,其启动参数如下:

w.start = "sudo node #{KTHXBYE_NODE_ROOT}/poll.js"

因为我使用的是Socket.IO,需要使用Flash Sockets(需要Node.js以root身份运行)。

然而,每当我启动上帝时,它都无法启动节点。我尝试使用sudo而不是sudo作为rvmsudo运行上帝(因为我正在使用RVM来管理我机器上的ruby版本),似乎没有任何修复方法。任何人都知道在神中使用sudo运行流程的方法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

这是我使用“god”运行node.js服务器的最小配置文件:

APP_ROOT = "/home/sphynx/app"                   # application root

God.pid_file_directory = "#{APP_ROOT}/pids"     # directory to store PID files

God.watch do |w|
    w.name = "chapayev"
    w.interval = 5.seconds # default
    w.start = "env node #{APP_ROOT}/server.js"  # path to node.js server file
    w.stop = "env killall node"                 # stopping node explicitly
    w.start_grace = 10.seconds
    w.restart_grace = 10.seconds            
    w.log = "#{APP_ROOT}/log/chapayev.log"      # to enable logging

    w.start_if do |start|                       # start if condition is met
      start.condition(:process_running) do |c|  # check if process is running
        c.interval = 5.seconds
        c.running = false
      end
    end
end

如果还没有启动它会自动启动node.js,并使用内部的“上帝”守护程序。

确保配置中包含“start_if”部分,该部分定义了启动受监视进程的条件。如果流程没有运行,我们有一个条件可以启动,正是我们需要的!

关于“sudo”权限:我认为没有必要在你的god config“start”命令中包含sudo。您可能宁愿使用sudo“god”本身调用,然后它也将使用sudo运行受监视的进程。例如,我正在使用以下命令测试“god”配置:

sudo god -c conf/chapayev.god -D

( - D用于在控制台中打印输出以立即查看所有配置错误)

有关详细信息,请查看此帖子: http://blog.acmarques.com/deploying_node_with_nginx_and_god

答案 1 :(得分:0)

使用Web服务器服务器闪存套接字策略文件是不是更好,例如nginx的?

server { 
    listen 843; 
    server_name {{ SERVER_NAME }} www.{{ SERVER_NAME }}; 
    location / { 
        root {{ PATH_TO_FOLDER_WITH_crossdomain.xml_FILE }}; 
        autoindex off; 
    } 
} 

和crossdomain.xml文件(用适当的值替换*):

<cross-domain-policy> 
     <allow-access-from domain="*" to-ports="*" /> 
</cross-domain-policy> 

这种方式节点不必用sudo启动。在我看来,这更容易,更安全。当以root身份运行时,节点创建的文件所有权也可能存在问题。

如果以root用户身份启动节点,则可以在端口绑定后对其进行chroot或更改UID。