Ubuntu 服务器在最后一次 ssh 关闭时终止后台进程

Ubuntu 服务器在最后一次 ssh 关闭时终止后台进程

我有一台 Ubuntu 14.04 服务器,我正在尝试启动阿帕奇卡拉夫从 ssh 退出 ssh 并期望 Karaf 保持执行状态。我实际上发现,一旦最后一个 ssh 关闭/注销,Karaf 进程就会终止。

我使用 bin/start 命令启动 Karaf此处描述(背景模式)文档中说这应该将 Karaf 置于后台模式,但我的经验表明这不会发生。一旦我退出 ssh,该进程就会终止。

我尝试使用“nohup”,但一旦最后一个 ssh 关闭,karaf 进程总是会被终止。我认为这不是 Karaf 的问题,而是 Ubuntu 的一些配置的问题。我在 Linux Mint 上也看到了同样的行为。

但是,如果我在运行 Raspbian 的 RaspberryPi 上运行 Karaf,它确实作为后台进程运行。

是否有 sshd 配置,一旦所有 ssh 连接结束,强制终止 ssh 中启动的所有进程?无论我如何尝试,我都无法在注销后让后台进程保留下来。

更新 查看start它使用的脚本exec

exec "$KARAF_HOME"/bin/karaf server "$@" >> "$KARAF_REDIRECT" 2>&1 &

这样就创建了另一个进程。如果我只执行bin/start文件描述符 0、1 和 2,则它们全部指向“/dev/null”。

如果我执行,然后nohup ./start 0<&- &>/dev/null &执行disown,则结果进程的 fd 0、1、2 都转到/dev/null。我在 RaspberryPi 上注意到 fd 0、1 和 2 都处于/dev/pts/0 (deleted)

答案1

该进程可能在会话领导者(在本例中为 shell)下运行,一旦您退出 shell,其下的所有进程都将被终止。以下是您可能需要遵循的进程步骤disown-

前两个步骤仅用于确认 -

  1. 运行jobs以查看该进程。如果它实际上已被后台运行,则应该在此处列出。
  2. fg将其带到前台 - 如果后台有多个作业,则可能需要提供作业 ID。
  3. ctrl+Z- 停止进程。
  4. bg- 背景
  5. disown -h [id]- 将 id 替换为作业 id。

第二种选择——守护进程

nohup ./scriptname 0<&- &>/dev/null &

答案2

尝试在里面运行屏幕会话并查看是否能解决问题。

相关内容