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也能自动执行
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查找下
nohup sh c.sh >/dev/null 2>&1 & 参考技术D 这脚本写的,为什么不直接在B机器上直接执行。a机器做了免密钥登录了吗,a.sh里的ssh……
以上是关于linux 远程调用脚本执行后不继续执行后续命令,需要输入ctrl+c,详细见补充的主要内容,如果未能解决你的问题,请参考以下文章
bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法
bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法