私は約50台のUbuntuマシンを持っており、そのマシンで次のコマンドを実行する必要があります。
sudo apt-get install htop
sudo scp -r [email protected]:/home/todd/pip /tmp/
sudo apt-get install python-pip
sudo pip install --no-index --find-links="file:///tmp/pip/" kazoo
sudo scp -r [email protected]:/home/todd/parallel-gnu.tar /tmp/
sudo su
cd /tmp
tar -xvf parallel-gnu.tar
cd parallel-20101112/
sudo ./configure && make && make install
sudo mkdir /appholder
sudo chown -R golden /appholder/
sudo mkdir -p /opt/lnp
sudo scp [email protected]:/keeper/data/release/comp.tar.gz /opt/lnp/
sudo chown -R golden /opt/lnp/
sudo mkdir -p /comp/core
sudo chown -R golden /comp/core
そのため、上記のコマンドを使用してシェルスクリプトファイルを生成commands.sh
し、50台のコンピュータをすべて含む別のファイルを作成しましたmachines.text
。
マイコンピュータのリストは次のファイルにありますmachines.text
。
somemachineA
somemachineB
私のコマンドは次のファイルにありますcommands.sh
。
#!/bin/bash
sudo apt-get install htop
sudo scp -r [email protected]:/home/todd/pip /tmp/
sudo apt-get install python-pip
sudo pip install --no-index --find-links="file:///tmp/pip/" kazoo
sudo scp -r [email protected]:/home/todd/parallel-gnu.tar /tmp/
sudo su
cd /tmp
tar -xvf parallel-gnu.tar
cd parallel-20101112/
sudo ./configure && make && make install
sudo mkdir /appholder
sudo chown -R golden /appholder/
sudo mkdir -p /opt/lnp
sudo scp [email protected]:/keeper/data/release/comp.tar.gz /opt/lnp/
sudo chown -R golden /opt/lnp/
sudo mkdir -p /comp/core
sudo chown -R golden /comp/core
私はこのようなスクリプトを持っており、execute.sh
次のように実行しています./execute.sh machines.txt
。
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "###################################################"
echo "Machine Name: $line"
scp commands.sh $line:/tmp/commands.sh
ssh -t $line 'script /dev/null . /tmp/commands.sh'
echo "###################################################"
done < "$1"
上記を実行すると、以下のエラーが表示され、次のコマンドは実行されませんsomemachineA
。
todd@testMachine:~$ ./execute.sh machines.text
###################################################
Machine Name: somemachineA
todd@somemachineA's password:
commands.sh 100% 104 0.1KB/s 00:00
Pseudo-terminal will not be allocated because stdin is not a terminal.
todd@somemachineA's password:
Script started, file is /dev/null
Script done, file is /dev/null
todd@somemachineA:/home/todd$ somemachineB: command not found
私が間違っていて、複数のLinuxシステムで複数のLinuxコマンドをどのように実行できますか?
ベストアンサー1
交換しよう
ssh -t $line 'script /dev/null . /tmp/commands.sh'
渡す
ssh $line 'bash /tmp/commands.sh'
- /dev/nullにスクリプトを書いていますか?
- コマンドを対話的に実行すると、ttyが割り当てられます。