запуск нескольких процессов в bash с помощью цикла for

#bash #ubuntu

#bash #ubuntu

Вопрос:

В ubuntu я пытаюсь запустить несколько экземпляров filebeat на одном хосте, используя цикл for, но я сталкиваюсь со странным поведением

Команда, которую я пытаюсь запустить

 for i in `seq 1 2` ; do /etc/filebeat-test/filebeat-$i/filebeat amp;  done
  

И сообщение об ошибке, которое я получаю, а затем, когда я выхожу из команды:

 Exiting: error loading config file: stat filebeat.yml: no such file or directory
^C
[1]-  Termine 1               /etc/filebeat-test/filebeat-$i/filebeat
[2]   Termine 1               /etc/filebeat-test/filebeat-$i/filebeat


  

Похоже, что $i не интерпретируется..

Странно то, что у меня эта команда работала пару раз, но через 2 секунды она не будет работать. Я также попытался запустить его из файла и заменить $ i на «$ i» с тем же результатом.

Есть идеи, что происходит? Спасибо за вашу помощь

Комментарии:

1. вам нужно добавить круглые скобки do ( few commands amp; parmeters ) amp; ; done , я думаю, в некоторых случаях вам также нужен bash env для каждого задания, тогда он становится do ( bash ( few commands amp; params ) ) amp; ; done осторожным с переменными и escape-символами, когда это необходимо в этом случае

2. Это связано не столько с путем к filebeat , сколько с отсутствием возможности filebeat.yml поиска для любого экземпляра, не говоря уже (предположительно) отдельного для каждого экземпляра.

3. @francoisP, у меня такая же проблема при запуске команды с вашим синтаксисом.

4. @chepner. Если я выполняю команду без цикла for (/etc/filebeat-test/filebeat-1/filebeat) Он работает нормально, поэтому путь к filebeat.yml, похоже, не является проблемой. Кроме того, это не объясняет, почему у меня была команда, работающая пару раз. Но в некотором смысле вы правы, поскольку, похоже, он находит двоичный файл, но не уникальный файл conf для каждого экземпляра

Ответ №1:

Работает ли это для вас:

 # set -x # uncomment this to see what actually happens while the lopp cycles
for i in `seq 1 2` ; do (/etc/filebeat-test/filebeat-$i/filebeat amp;);  done