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

nohup <command> <arg> &

当我SSH到Linux服务器,如果我想运行一个命令,并确保它将继续在SSH注销后,在后台运行,我会使用上述命令。

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

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

但是,我想从SSH注销后继续运行该程序。 当我运行nohup <installation_dir>/nodejs/bin/node <js_program.js> > <stdout.out> & ,程序将在后台运行。 但是,当我从SSH注销时,程序也将立即终止。 在这种情况下nohup命令似乎没有效果。

我该如何解决这个问题?

如果你已经安装了at软件包,并且你没有被拒绝(直接通过/etc/at.deny ,或者通过/etc/at.allow隐式地使用它),那么请尝试使用以下任一项:

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

要么:

  at now 

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

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

这是我在传统意义上的“ nohup ”模拟nohup实现(例如,AIX 5.3和更早版本)的系统。

运行:

 nohup command ... > file & 

将离开stderr和stdin。 相反,运行:

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

要么:

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

这将redirect标准输出并closures标准input。

请记住,如果不能从标准input读取,您的命令可能会中止。

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

不要点击XbuttonclosuresPuTTY窗口,而是在SSH shellterminal中inputexit以注销。 现在该进程能够在注销后继续在后台运行。

如果我点击Xbuttonclosures窗口,后台进程将立即终止。