Для цикла для портов на нескольких удаленных серверах в Linux

262
Andi

Моя программа должна работать на нескольких удаленных серверах с разными портами в скрипте, вот пример:

На сервере 1 нужно запустить:

java -jar test.jar 9001 **.**.**.** 9001 java -jar test.jar 9001 **.**.**.** 9002 java -jar test.jar 9001 **.**.**.** 9003 . . . java -jar test.jar 9001 **.**.**.** 9020 

На сервере 2 нужно запустить:

java -jar test.jar 9001 **.**.**.** 9021 java -jar test.jar 9001 **.**.**.** 9022 java -jar test.jar 9001 **.**.**.** 9023 . . . java -jar test.jar 9001 **.**.**.** 9035 

...

Так что для создания скрипта удобнее, как использовать цикл for в каждом серверном скрипте для запуска нескольких команд?

1

1 ответ на вопрос

2
rda

сервер 1:

for i in $(seq -f "%03g" 1 20) do java -jar test.jar 9001 **.**.**.** 9$ done 

сервер 2:

for i in $(seq -f "%03g" 21 35) do java -jar test.jar 9001 **.**.**.** 9$ done 

в то время как

seq -f <format> <first> <last> 

использует printfстроку формата стиля. Формат должен быть подходящим для печати одного аргумента типа double. Он может содержать спецификацию преобразования, состоящую из:

  • %: Вводит спецификацию преобразования
  • 0: Преобразованное значение дополняется слева нулями, а не пробелами (необязательно)
  • 3: Строка десятичной цифры (с ненулевой первой цифрой), указывающая минимальную ширину поля (необязательно)
  • g: Вывести аргумент типа doubleв формате с плавающей запятой или в экспоненциальной записи. Замыкающие нули удаляются из дробной части результата; десятичная точка появляется только в том случае, если за ней следует хотя бы одна цифра. (Это позволяет нам напечатать doubleчто выглядит как integer)

Для более подробной информации смотрите:

man seq man 3 printf 
Спасибо, я забыл упомянуть, здесь нужно запускать эти команды одновременно, так как изменить цикл for? Andi 7 лет назад 0
Я понял это, просто добавь & позади команды java. Спасибо за помощь. Но что значит% 03g? Andi 7 лет назад 0
Добавьте `&` после команды, чтобы отправить ее в фоновый режим. rda 7 лет назад 0
Спасибо. Но что значит% 03g? Это означает "00x" в порту? Andi 7 лет назад 0
@Анди, да, именно это говорит `seq` использовать правильный формат (чтобы добавить нули слева), см. Также мой обновленный ответ. rda 7 лет назад 0

Похожие вопросы