vagrant ssh -c 并在连接关闭后保持后台进程运行
Posted
技术标签:
【中文标题】vagrant ssh -c 并在连接关闭后保持后台进程运行【英文标题】:vagrant ssh -c and keeping a background process running after connection closed 【发布时间】:2014-08-15 18:08:26 【问题描述】:我正在编写一个脚本来启动和后台运行 vagrant 机器内的进程。好像每次脚本结束,ssh会话结束,后台进程也结束了。
这是我正在运行的命令:
vagrant ssh -c "cd /vagrant/src; nohup python hello.py > hello.out > 2>&1 &"
hello.py
实际上只是一个烧瓶开发服务器。如果我以交互方式登录 ssh 并手动运行nohup
命令,在我关闭会话后,服务器将继续运行。但是,如果我通过vagrant ssh -c
运行它,就好像该命令根本没有运行(即没有创建 hello.out 文件)。手动运行和通过 vagrant ssh -c 运行有什么区别,如何修复它才能正常工作?
【问题讨论】:
对于它的价值,我正在努力解决这个问题。但是,虽然这不是您问题的直接答案,但我发现 JetBrains Webstorm 为我解决了这个问题。它与 Vagrant 集成,让我可以为在 Vagrant 框中运行的 Bash 或 Nodejs 设置运行配置。然后可以在 WebStorm 中停止和启动这些运行配置。太棒了。 【参考方案1】:在尝试将 Django 应用程序作为守护程序运行时,我遇到了同样的问题。我不知道为什么,但是在后面添加“sleep 1”对我有用。
vagrant ssh -c "nohup python manage.py runserver & sleep 1"
【讨论】:
我尝试了大量的解决方案,包括精心重定向 stdout 和 stderr 并提供 /dev/null 作为输入。这是我发现的唯一一个真正有效的。 @SandyChapman 我刚刚找到了这个。不过很好奇——还有什么选择。 @cricket_007 通常当您添加一个神奇的等待时,它并不理想。它会导致在不同系统上运行时容易破坏的伪劣代码。 I. 这种情况可能是在 tmux 会话中运行的替代方案?不知道,将不得不尝试一些替代方案。 在我使用 pipenv 的情况下:vagrant ssh -c "pipenv run nohup python ./manage.py run_long_backup --my-arg & sleep 1;"
。似乎成功了。我可以vagrant ssh; tail -f nohup.out
观看命令的输出。【参考方案2】:
在运行 wireshark 时,在 ssh 命令中运行 nohup 对我不起作用。这样做了:
nohup vagrant ssh -c "wireshark" &
【讨论】:
我完全不明白这一点,但这也对我有用。我实际上跑了vagrant ssh -c "sudo -u otheruser -i some-script.sh"
,但无法让它继续运行。但是我这边的 nohup 起作用了。知道为什么会这样吗?
在没有nohup
的情况下,我得到了相同的结果,最终使用vagrant ssh
的--no-tty
选项。以上是关于vagrant ssh -c 并在连接关闭后保持后台进程运行的主要内容,如果未能解决你的问题,请参考以下文章