2014-11-25 124 views
1

你能帮我解决下面的问题吗?等待一个完成的过程

我必须发送一个命令到一个主机(命令需要大量的时间来执行,并创建一个文件):这个命令得到执行

ssh [email protected] ssh [email protected] 'command1' 

后,我需要压缩的文件中创建

ssh [email protected] ssh [email protected] 'gzip file1' 

比做同样的事情的另一台主机

ssh [email protected] ssh [email protected] 'command1' 
ssh [email protected] ssh [email protected] 'gzip file2' 

是否有可能同时运行这个命令是为了节省脚本执行的时间而并行执行的? 预先感谢您。

+0

你对'两个命令'是什么意思? 'command1'和'gzip'? – Jdamian 2014-11-25 12:24:53

+0

可能重复的[bash:在后台启动多个链接命令](http://stackoverflow.com/questions/161252/bash-start-multiple-chained-commands-in-background) – l0b0 2014-11-25 12:38:14

+0

我需要运行命令背景并在完成时通知我。 因为该命令是一个依赖的(变化)我不能把这些命令放在远程主机! – Ardit 2014-11-25 12:55:22

回答

4

尝试像

ssh [email protected] 'command1 && gzip file1' & 
ssh [email protected] 'command1 && gzip file1' & 
ssh [email protected] 'command1 && gzip file1' & 

你可以把所有的命令在一个文件中,你从

&&在这种情况下启动主机上的工作方式类似于;但第二个命令仅在第一次执行作品

+0

你错过了最初的'ssh',但这是正确的想法。 – chepner 2014-11-25 12:30:49

+0

事实上,该命令是一个变量(依赖输入),所以我不能把它们放在远程主机的文件中。 – Ardit 2014-11-25 12:45:47

+1

下面是如何从“开始”主机传递一个变量''X =“fish”ssh -t host1 ssh -t host2“echo $ X; uname; hostname”''''' shell启动命令,所以$ X从那里设置 – Vorsprung 2014-11-25 14:52:37

2

简单地做:

ssh [email protected] ssh [email protected] 'command1; gzip file1' 

,如果使用gzip应该只运行的第一个命令是成功的,那么:

ssh [email protected] ssh [email protected] 'command1 && gzip file1' 

第二个命令将在第一个之后推出。

+0

如果我使用 ssh uname1 @ host1 ssh uname2 @ host2'command1; gzip file1'& 该命令在后台运行,如何知道它已完成,以便我可以通过ftp/sftp获取文件? – Ardit 2014-11-25 12:59:40