2014-02-18 4 views
1

Я создаю скрипт litle для запуска некоторой команды на всех контейнерах OpenVZ внутри узла.Запустить скрипт для каждой строки файла

Я прочитал все идентификаторы контейнеров OpenVZ, и я запустил некоторые команды для всех из них.

Вместо в файле listvz.txt у меня есть много идентификаторов, команда работает только на первом, так что цикл не работает ...

Любая идея? Спасибо!

#! /bin/bash 
export PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin" 

cat /dev/null > listvz.txt; 
ls -r1 /vz/private > listvz.txt; 

cat listvz.txt | while read line; do 
echo FixMySQL in ${line} 
vzctl exec ${line} /etc/init.d/mysql stop; 
vzctl exec ${line} /etc/init.d/mysqld stop; 
vzctl exec ${line} rm -rf /var/lib/mysql/mysql.sock; 
vzctl exec ${line} /etc/init.d/mysql start; 
vzctl exec ${line} /etc/init.d/mysqld start; 
done 

Результат когда я бегу:

[[email protected] ~]# sh mysql-check.sh 
FixMySQL in 2168 
/bin/bash: /etc/init.d/mysql: No such file or directory 
/bin/bash: /etc/init.d/mysqld: No such file or directory 
/bin/bash: /etc/init.d/mysql: No such file or directory 
/bin/bash: /etc/init.d/mysqld: No such file or directory 
[[email protected] ~]# 

только работать на CTID 2168, но есть намного больше CTIDs на файл TXT ...

Исправлено!

cat listvz.txt | while read line; do 
echo FixMySQL in ${line} </dev/null 
vzctl exec ${line} /etc/init.d/mysqld stop </dev/null 
vzctl exec ${line} rm -rf /var/lib/mysql/mysql.sock </dev/null 
vzctl exec ${line} /etc/init.d/mysqld start </dev/null 
done 
+1

Если вы решили свои собственные проблемы, вы должны ответить вы использовали этот вопрос самостоятельно, и принять этот ответ. – Carpetsmoker

ответ

2

О !!! ... МФС должен быть сохранен и восстановлен, я предпочитаю следующий код:

while read LINE ; do 
    # Do stuffs with $LINE 
done < input.txt 
Смежные вопросы