如何使用nohup在用户注销后继续运行命令?

如何使用nohup在用户注销后继续运行命令?

nohup <command> <arg> &

当我通过 SSH 进入 Linux 服务器时,如果我想运行一个命令并确保它在我退出 SSH 后仍将在后台继续运行,我会使用上述命令。

最近我正在使用一个名为Bitnami Node.js 堆栈。它是一个独立的软件包。node安装目录中的 bin 文件夹中有一个二进制文件。

在命令行中,我可以使用node命令来运行我的 JS 程序:node <js_program.js>。没有问题。

但是,我希望在退出 SSH 后继续运行该程序。当我运行 时nohup <installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out> &,该程序将在后台运行。但是,当我退出 SSH 时,该程序也会立即终止。nohup在这种情况下,该命令似乎不起作用。

我该如何修复此问题?

答案1

跑步:

nohup command ... > file &

将使 stderr 和 stdin 保持打开状态。相反,运行:

nohup command ... > file 2>&1 <&- &

或者:

nohup command ... > logfile 2> errfile <&- &

这将重定向 stdout 并关闭 stdin。

请记住,如果您的命令无法从标准输入读取,它可能会中止。

答案2

如果您已at安装该软件包,并且没有被拒绝(直接通过/etc/at.deny,或隐式通过/etc/at.allow)使用它,请尝试使用以下任一方式:

  echo "<installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out>" | at now

或者:

  at now

并在提示符下指定您的命令at>

这应该安排命令通过at守护进程立即运行。

这是我传统上在实现nohup不完善的系统nohup(例如 AIX 5.3 及更早版本)上进行“模拟”的方式。

答案3

我设法通过改变从 SSH shell 终端注销的方式来解决这个问题。

我没有点击X关闭 PuTTY 窗口的按钮,exit而是在 SSH shell 终端中输入注销。现在,在我注销后,该进程能够继续在后台运行。

如果我单击X按钮关闭窗口,后台进程将立即终止。

相关内容