我有一台 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
-
前两个步骤仅用于确认 -
- 运行
jobs
以查看该进程。如果它实际上已被后台运行,则应该在此处列出。 fg
将其带到前台 - 如果后台有多个作业,则可能需要提供作业 ID。ctrl+Z
- 停止进程。bg
- 背景disown -h [id]
- 将 id 替换为作业 id。
第二种选择——守护进程
nohup ./scriptname 0<&- &>/dev/null &