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
按钮关闭窗口,后台进程将立即终止。