如何防止通过SSH启动的守护进程在注销时终止?

时间:2014-07-09 00:05:24

标签: linux ssh daemon

编辑这是固定的。请参阅下面的答案。


我有一台无头服务器在Angstrom Linux上运行传输守护进程。我能够通过this init script SSH进入机器并调用传输守护进程;但是,一旦我退出,该过程就会终止。

脚本中发出的命令是:

start-stop-daemon --chuid transmission --start --pidfile /var/run/transmission-daemon.pid --make-pidfile --exec /usr/local/bin/transmission-daemon --background -- -f

通过# /etc/init.d/transmission-daemon start启动守护程序后,我可以使用ps验证该进程是否由用户transmission拥有(这不是我通过SSH登录的用户)

我已经尝试了上述命令的每个变体,包括:

  • 使用和不使用start-stop-daemon的--background选项
  • > /dev/null 2>&1 &附加到start-stop-daemon命令(source - 虽然该线程中似乎有不同的结果,但这是否是正确的方法)
  • 追加> /dev/null 2>&1 & </dev/null &source
  • &添加到命令的末尾
  • 使用nohup

这些似乎都不起作用 - 结果始终相同:关闭SSH会话后,进程立即退出。

在断开SSH会话后,我可以/应该做些什么来保持守护程序运行?

4 个答案:

答案 0 :(得分:2)

您是否尝试过使用GNU Screen?

它允许您即使断开连接也会保持会话打开(但如果退出则不会。)

这是一个简单的例子:

apt-get install screen

yum install screen

答案 1 :(得分:2)

由于我还不能发表评论:),这里有一个很好的网站,解释了屏幕的一些功能,http://www.tecmint.com/screen-command-examples-to-manage-linux-terminals/

我一直使用屏幕,完全按照你所说的去做。您在终端中打开一个屏幕,执行您需要执行的操作,然后您可以注销,您的流程仍将继续运行。

答案 2 :(得分:2)

sudo loginctl enable-linger your_user 
# This allows users who are not logged in to run long-running
# service after ssh session ends

答案 3 :(得分:0)

现在已经解决了。这是背景:在遇到这个问题之前的某个时刻,我的$ PATH(我不记得是什么)和传播守护进程所在的位置(/sbin)发生了什么事。除去。在传输守护程序不再出现在系统上的错误印象下,我再次从ipk安装。这是我最初提出这个问题时系统所处的状态。

我不知道为什么会有所不同,但是一旦我纠正了$ PATH并开始在/ sbin上安装了传输守护进程,一切都恢复了。我退出后守护进程继续运行。