2015-07-06 3 views
1

У меня есть этот простой скрипт, чтобы попытаться запустить 3 различных процессов Redis Sentinel, который будет следить за ведущий/ведомый Redis процессы:Простой BASH скрипт для запуска Redis часовому

# (attempts to run 3 sentinel processes from one script) 
    redis-sentinel /usr/local/redis/sentinel-26379.conf 
    redis-sentinel /usr/local/redis/sentinel-26380.conf 
    redis-sentinel /usr/local/redis/sentinel-26381.conf 
# end 

, но, конечно, это не будет на самом деле начать 3 отдельных процесса - он просто запустит первую команду в окне терминала, а две две команды не будут запущены. Каким образом я могу запускать все 3 команды в отдельных окнах из одного сценария? (У меня также есть некоторые другие команды, которые я хотел бы запускать из одного и того же скрипта, но я хотел бы сделать это простым для примера.)

Я использую iTerm2 на Mac OSX.

+1

Итак, вы хотите не только параллельные процессы, но и выделенные окна/экраны? –

+0

нет Я классный, просто параллельные процессы, мне не нужны отдельные окна –

+0

, один из способов - использовать applescript, но это может быть не самый простой способ. –

ответ

1

bash предлагает job control, что означает, что вы можете запускать несколько заданий одновременно, в фоновом режиме. Используйте &, чтобы начать процесс в фоновом режиме:

redis-sentinel /usr/local/redis/sentinel-26379.conf & 
redis-sentinel /usr/local/redis/sentinel-26380.conf & 
redis-sentinel /usr/local/redis/sentinel-26381.conf & 

Если вы наберете

jobs 

вы получите список запущенных заданий. Обратите внимание, что все задания будут записывать свой вывод на один и тот же терминал. Я думаю, это то, что вы действительно хотите.

Если вы действительно хотите запустить эти процессы в разных окнах, вам нужно запустить три терминала из вашего сценария и установить команду redis-sentinel в качестве их начальной команды. Я не знаю iTerm на OSX, но я почти на 100% уверен, что он предлагает такую ​​функциональность. Для гном-терминал это будет выглядеть следующим образом:

gnome-terminal -e 'redis-sentinel /usr/local/redis/sentinel-26379.conf' & 

Проверьте страницу человека, чтобы получить правильный выбор для iTerm.

+0

это отлично работает, но для вас еще один вопрос - как мне убить/закрыть все эти задания с помощью одной команды - мне нужно было сделать «ps auxww | grep -i redis», чтобы увидеть все процессы, чтобы убить их одним. есть ли способ их чисто убить? –

+0

также «$> jobs» и «$> sudo bash jobs» ничего не сделали, но ваше основное предложение, похоже, отлично поработало –

+0

, чтобы быть более конкретным, команда jobs действительно работает, но даже когда я открыл новый терминал окна, он ничего не возвращал (даже «пустой список»). «$> jobs -l» тоже ничего не перечислял. странно. –

 Смежные вопросы

  • Нет связанных вопросов^_^