linux 程序 其他机器运行,Linux下如何通过ssh到其他机器然后执行命令

前言

最近遇到一个问题:申请到了学校的高性能服务器,但是很多软件没法自己安装,只能通过在Lab服务器上面跑完软件的分析,再转移到高性能上面运行自己写好的程序(因为Lab的服务器用的人太多,负载太高)。

那么问题就来了,如果我想可以半自动的把流程走完,要如何操作,也就是在Linux下如何通过ssh到其他机器然后执行命令?

配置

比如Lab服务器`lunar@10.192.176.2`,高性能服务器`lunar@10.128.28.4`;

1. 在上面几台机器上分别配置用户ssh等效性连接。(注意:在所有机器上都要执行下面的操作)

首先在高性能服务器上面:cd ~ && ssh-keygen && ssh-copy-id -i .ssh/id_rsa.pub lunar@10.192.176.2

再返回到Lab服务器:cd ~ && ssh-keygen && ssh-copy-id -i .ssh/id_rsa.pub lunar@10.128.28.4

SSH等效性连接提供了一种在集群中其他主机上复制文件和执行程序时不需要口令提示的安全方式。

2. 配置好SSH等效性连接后,在这几台机器上复制文件和执行程序就不需要口令了,ssh过去也不需要口令。

那么如何从Lab服务器上面转到高性能服务器的特定目录再运行高性能那边的程序`run.next.sh`呢?ssh lunar@10.128.28.4 "cd /special_path/; nohup run.next.sh &> run.next.sh.log &"

可以把这一行命令写入到一个shell脚本:`runatHP.sh`

注意:当多于两个命令时,一定要把所有命令以分号的方式写在双引号里面。

3. 但是Lab服务器的流程`run.first.sh`还在运行中,需要编写一个实时检测该程序是否完成的shell脚本`detect.pid.sh`:vi detect.pid.sh

#!/bin/sh

# ----------------------------

# Subroutine to echo the usage

# ----------------------------

usage()

{

echo "USAGE: sh $0 [first-pid] [next-script]"

exit 1

}

[ $# -eq 0 ] && usage

while :

do

if kill -0 ${1}

then

sleep 120

else

nohup /bin/sh ${2} &> ${2}.log &

break

fi

done

保存到`detect.pid.sh`文件,然后`chmod +x detect.pid.sh`;

接下来我们需要知道`run.first.sh`的运行PID:ps x | grep 'run.first.sh' | grep -v grep | awk '{print $1}'

57101

4. 使用在LAB服务器上写好的`detect.pid.sh`来检测`run.first.sh`的运行状态,一旦运行完则通过`runatHP.sh`来运行高性能上的`run.next.sh`:nohup /path-lab/detect.pid.sh 57101 runatHP.sh &

后台运行检测脚本就可以去做其他的事情了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值