我想在一台机器上启动多个作业,每个作业,可通过ssh访问。
所以我有一个文件host.txt,其中包含机器的名称。所有计算机都在同一文件系统上运行。我现在需要一个循环来执行以下操作:
for i=1:nrJobs
connect to i-th host of host.txt via ssh. (Since I dont want to store passwords, it may ask for it).
open a new screen
start script.sh with parameter $i
detach screen
end
特别是,我只是想开始工作,而不想等待每项工作完成。因此,我想使用屏幕来访问每个作业。
作为示例,host.txt可能是:
hostA
hostB
hostC
hostD
不需要用户名,我也无法使用sudo。
我的想法是从以下开始:
param=1
for host in $(cat host.txt) do
ssh $host 'bash -s' < script.sh $param
param=$((param+1))
done
现在缺少的是如何在脚本中附加和分离屏幕
答案 0 :(得分:0)
我猜你正在寻找这样的东西。
#!/bin/bash
param=1
while read host; do
screen -dmS "$host-$param" ssh "$host" bash -s < script.sh "$param"
param=$((param + 1))
done <hosts.txt
就个人而言,我不会将Screen用于此特定工作(特别是如果ssh
最终可能要求输入密码,但您仍希望切换到公钥验证)但这应该有助于您开始使用