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 并在连接关闭后保持后台进程运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在每次 vagrant up 命令后保持 RSA 密钥的指纹不发生变化?

保持SSH会话活动[关闭]

linu保持远程会话

如何通过 SSH 运行 PHP 脚本并在我退出后保持运行

如何在关闭ssh连接的情况下,让程序继续运行?

状态栏在关闭模式视图后保持隐藏并在几秒钟后出现