启动capistrano任务的后台进程

capistrano任务

namespace :service do desc "start daemontools (svscan/supervise/svscanboot)" task :start,:roles => :app do sudo "svscanboot&" end end

现在,这不起作用:svscanboot过程根本不运行。 这帮助我findsleep : https : //github.com/defunkt/resque/issues/284其他来源指出我nohup , redirection ,并且pty => true ,所以我尝试了所有这些。

run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &" # NO run "(svscanboot&) && sleep 1" # NO run "(nohup svscanboot&) && sleep 1" # YES!

现在,有谁能向我解释为什么我需要睡眠声明,nohup有什么区别? 为了logging所有上述运行同样好,如果从用户shell运行,问题只在capistrano的上下文中。

谢谢

以编程方式检查进程是否在后台运行

后台进程closuresssh客户端后终止

后台放置一个进程

如何使通过Web服务器接受命令的Linux服务?

如何控制后台进程/守护进程

每隔2分钟刷新一次GNU的bash循环

如何在c ++中执行主程序时在后台检查是否已经过了一分钟?

如何在Linux系统调用的背景下实现一个进程?

我如何与后台Python实例进行通信?

如何在shell中启动一个工作,即使启动它的shell终止,这个工作也将持续下去

我简单的解决方案将使远程服务器上的svscanboot.sh文件与您想要运行的任何代码。 在你的情况

svscanboot >/tmp/svscanboot.log 2>&1

在耙耙任务添加

run "sh +x somefile.sh &"

这对我很好。

尝试按照这里解释的方法分叉进程: 在Ruby中产生一个后台进程

你应该可以做这样的事情:

job1 = fork do run "svscanboot" end Process.detach(job1)

同样,结帐: Capistrano开始后台任务

我认为nohup只是启动后台进程,所以你不需要明确设置最后的&。

你试过了吗

run "nohup svscanboot >/tmp/svscanboot.log 2>&1"

(没有结束并发送到后台)。

当你目前的capistrano会议结束时,这应该工作,并保持运行。

尝试这个

run "nohup svscanboot >/tmp/svscanboot.log 2>&1 & sleep 5",pty: false

我想分享我的解决方案,这也适用于执行多个命令。 我尝试了许多其他在线发现,包括“睡眠N”黑客。

run("nohup sh -c 'cd #{release_path} && bundle exec rake task_namespace:task_name RAILS_ENV=production > ~/shared/log/<rakelog>.log &' > /dev/null 2>&1",:pty => true)

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...