【问题标题】:Exiting a shell script running on the host退出在主机上运行的 shell 脚本
【发布时间】:2016-07-29 07:06:17
【问题描述】:

这是我从机器 1 启动到机器 2(远程)的脚本代码

 #!/bin/bash
 nohup perl server.pl &
 echo "script ends"
 exit

文件 server.pl 在 while(1) 循环中运行,永远监听套接字。

我现在面临的问题是:当我在调用此脚本后远程启动此 shell 脚本时,我在启动此 shell 脚本的文件中还有其他工作要做。 例如:

#this script launches the shell script 
$cmd = "sabkuch.sh";
$ssh->system($cmd);#using Openssh perl package to remotely run commands
#do some other processing
print "Welcome to USA\n";

运行上述代码时,我无法打印语句,直到我给出 Ctrl-C

如果我在机器 2 本身上启动这个 shell 脚本(没有从机器 1 远程启动它)我得到了想要的结果,我不知道我哪里出错了,可能是什么问题?

PS:我已经在 shell 脚本中注释了所有打印语句(以避免一些标准输出问题,尽管 & 再次将进程带到 fg)

【问题讨论】:

标签: linux bash perl shell background-process


【解决方案1】:

这在 Perl 或 SSH 中不是问题,这是您使用 nohup 的方式。如果您将其称为

,该脚本将同样挂起
ssh host2 ./sabkuch.sh

nohup 仅在您像这样重定向 stdout/stderr 时才真正分离以让调用 ssh 进程终止:

nohup perl server.pl >/dev/null 2>&1 &

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多