Я в настоящее время работаю над маленьким сценарием, где я должен обновить файл на нескольких серверах, у меня есть длинный список IP моих серверов, и в настоящее время я использую ncftpput
добавить файлы к серверам по одному.
Я не могу выяснить, как запустить ncftpput
со следующим IP-адресом в моем списке так, чтобы у меня могло быть несколько обновлений, работающих одновременно.
Мой список является просто IP-адресами:
192.168.0.1
192.168.0.2
192.168.0.3
......
until 192.168.0.150
То, в чем я нуждаюсь, является первым ncftpput
для доступа к первому IP второй IP номер два и так далее для суммы потоков, мне нужно / система может обработать.
Скажем, 10 за один раз и то, когда первый поток заканчивает его просто, берет следующий IP, НЕ взятый любым из других потоков.
Я надеюсь, что ясно выразился на своей проблеме и что кто-то может помочь мне понять это.
До сих пор я делаю его этот путь: (работающий по одному)
while read ip; do
ncftpput -c -A -u "$USER" -p "$PASSWD" "$ip" "/usr/local/program/program.conf" < "~/addthisinfo" 2>/dev/null
if [ $? -eq 0 ]
then
echo -e "Here goes my succes test" >>/tmp/text_added
else
echo "$ip failed ! please take care of this"
fi
done <"$pathtoiplist""/iplist"
Я пробовал некоторыми ответами, которые я нашел по всей сети, но я не вижу свой выход из этого. Я продолжаю заканчивать с новым экземпляром ncftpput
или несколько начинающие с вершины моего файла а не со следующего IP-адреса в списке.
Просто поместите &
символ в конце Вашего ncftpput
команда, чтобы сделать, это работать в фоне и возврате сразу управляет назад к сценарию, как это:
ncftpput [...] < "~/addthisinfo" 2>/dev/null &
я опустил длинный список опций, которые Вы имели, не забывайте добавлять их назад вместо [...]
Основываясь на ответе Командующего Байта, я предлагаю
while read ip do ( ncftpput -c -A -u "$USER" -p "$PASSWD" "$ip" "/usr/local/program/program.conf" < "~/addthisinfo" if [ "$?" -eq 0 ] then echo "Here goes my success test" >>/tmp/text_added else echo "$ip failed ! please take care of this" fi ) & done < "$pathtoiplist/iplist" 2>/dev/null
Примечания:
iplist
. Это позволяет оболочке обнаруживать и регистрировать отказ любого ncftpput
экземпляр (процесс)."$ip"
и "$pathtoiplist"
). Но необходимо также заключить в кавычки "$?"
. Строго говоря, Вы не должны заключать простые постоянные строки в кавычки как "/usr/local/program/program.conf"
. Но это не причиняет боль.echo
для каждого успешного вызова, и я особенно не знаю, почему Вы хотите сделать это с echo -e
(когда текст сообщения не содержит обратных косых черт).echo "$ip failed ! please take care of this" > "/tmp/$ip.error"
2>/dev/null
от ncftpput
управляйте к циклу ( done
строка) для простоты. Обратите внимание, что Вы не можете сделать этого с < "~/addthisinfo"
, так как Вам нужен каждый экземпляр для чтения файла независимо."$pathtoiplist""/iplist"
кому: "$pathtoiplist/iplist"
. Это безопасно пока первый символ после имени переменной (/
, в этом случае), тот, который не позволяется в именах переменной. Я сделал то же самое с "/tmp/$ip.error"
, выше.