linux 远程调用脚本执行后不继续执行后续命令,需要输入ctrl+c,详细见补充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 远程调用脚本执行后不继续执行后续命令,需要输入ctrl+c,详细见补充相关的知识,希望对你有一定的参考价值。

初学linux,工作需要写个脚本,涉及到远程调用脚本,执行nohup后不继续执行的问题,具体如下:
A机器:192.168.0.1
B机器:192.168.0.2

A机器上脚本a.sh:
ssh root@192.168.0.2 "cd /;sh b.sh"
echo “finish"
B机器上脚本/b.sh:
nohup sh c.sh &
echo "start c.sh"
#c.sh是一个需要长时间执行的脚本

现在A上开个终端,执行脚本a.sh:终端中显示完start c.sh 后,终端就停下来无响应,我摁ctrl+c后,才执行a脚本的后续命令,就是显示

"finish"
另外在B机器上的c.sh进程在后台正常启动。

请问问题出现的原因,以及希望改成不输入ctrl+c也能自动执行

参考技术A 两个问题.
1. 确定你A机器当前用户的密钥文件在B机器的~/.ssh/id_dsa.pub里面.
参考: http://renyongjie668.blog.163.com/blog/static/160053120101210221908/
2. 修改你的脚本如下.
ssh root@192.168.0.2 "cd /;sh b.sh" >/dev/null 2>&1
echo “finish"

还有问题的话.可以找我.我们慢慢排除.
参考技术B a.sh中执行(ssh root@192.168.0.2 "cd /;sh b.sh")这个时候就等于重新调用一个连接登录的子shell,所以无法执行下去

要想顺序执行下去,可以使用expect命令

具体参考:
http://zhidao.baidu.com/question/322012019.html追问

首先,那个expect脚本我提示spawn command not found,其次,【a.sh中执行(ssh root@192.168.0.2 "cd /;sh b.sh")这个时候就等于重新调用一个连接登录的子shell】,但是如果调用的子shell中没有nohup的话,是会正常返回并继续执行的。

希望解释下

追答

ssh root@192.168.0.2 "cd /;sh b.sh" 执行后需要输入密码,所以会一直等待

看下你的expect路径对不对,“#!/usr/local/bin/expect”这个,使用whereis expect查找下

参考技术C b.sh修改,将输出重定向
nohup sh c.sh >/dev/null 2>&1 &
参考技术D 这脚本写的,为什么不直接在B机器上直接执行。a机器做了免密钥登录了吗,a.sh里的ssh……

以上是关于linux 远程调用脚本执行后不继续执行后续命令,需要输入ctrl+c,详细见补充的主要内容,如果未能解决你的问题,请参考以下文章

bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法

bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法

求问 BAT脚本如何自动执行 adb shell 以后的命令

Linux FTP远程备份shell脚本命令

bat命令之执行脚本后不退出窗口

本地shell脚本中ssh到远程服务器并执行命令