【问题标题】:sinatra start as daemon programmaticallysinatra 以编程方式作为守护进程启动
【发布时间】:2015-08-25 14:53:18
【问题描述】:

现在,在加载完所有内容后,我的可执行文件会像这样运行我的应用程序:

Rack::Handler::pick(['puma']).run VCK::App

它可以工作,但它会阻塞终端(这对于开发来说是可以的)

如何从我的可执行文件中以编程方式将其作为守护程序启动?

编辑:

我用来启动 sinatra 作为守护进程的代码:

    if options[:daemonize]
        pid = fork {Rack::Handler::pick(['puma']).run VCK::App}
        File.open(pid_file_loc, 'w') {|f| f.write(pid)}
        Process.detach(pid)
    else
        Rack::Handler::pick(['puma']).run VCK::App
    end

我用来停止 Sinatra 守护进程的代码:

Process.kill(15, File.read(pid_file_loc).to_i)

【问题讨论】:

    标签: ruby sinatra daemon


    【解决方案1】:

    您可以使用Process#daemon在您的代码中守护任何 ruby​​ 进程

    【讨论】:

    • 这不是一个守护进程,它只是一个在后台运行的进程,其标准输出/错误会发送到控制台。一旦 shell 关闭,会话将收到 HUP 信号并关闭 ruby​​ 进程。至少应该执行“nohup ruby​​ server.rb > /var/tmp/server.out 2>&1 &”之类的操作,以防止进程关闭挂断信号。
    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    相关资源
    最近更新 更多