这是我从机器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脚本中的所有打印语句(为了避免一些stdout问题,尽管& 再次将进程转移到fg)
答案 0 :(得分:1)
这在Perl或SSH中不是问题,而是你使用nohup
的方式。如果将其称为
ssh host2 ./sabkuch.sh
nohup
只有真正分离才能让调用ssh进程终止,如果你像这样重定向stdout / stderr:
nohup perl server.pl >/dev/null 2>&1 &