Сценарий Bash, чтобы запуститься и затем завершить работу/перезапустить различных процессов

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

Что является самым легким способом получить процесс после запуска его и сохранения той информации так, чтобы, когда я запускаю скрипт снова, он проверил, чтобы видеть, была ли та информация сохранена и затем закрывает те процессы прежде, чем перезапустить их.

Я также хочу, чтобы сценарий был достаточно гибок таким образом, что, если я завершаю работу процесса вручную, он a) не бросит ошибку, если это не может найти процесс и b) случайно не закроет некоторый другой процесс, который с тех пор поделился любой информацией идентификации, которую я хранил.

Обновление

Строго говоря, я хочу, по крайней мере, сделать следующее в данный момент:

1) Тип, который любит короткая команда, "запускается-dev"

2) Выполнитесь следующее (Обратите внимание, что я хочу, чтобы вторые и третьи команды работали в фоновом режиме, и использую и сделать так, но не заключительная команда, поскольку я хочу видеть вывод от пассажира, когда это работает):

  1. Изменитесь на мой рабочий каталог
  2. Запустите faye как фоновый процесс
  3. Запустите watchr как фоновый процесс
  4. Запустите пассажира

До сих пор у меня есть это

#!/bin/bash
cd ~/path/to/my/working-directory
rackup faye.ru -s thin -E production &
watch refresh.watchr &
passenger start

Это хорошо работает, но проблема возникает, когда я должен перезапустить все эти процессы. Я сначала должен разыскать все их идентификаторы процесса и затем уничтожить их перед рабочим запуском-dev снова. Поэтому я хотел бы:

4) Введите короткую команду как "перезапуск-dev", который разыскивает процессы, которые я ранее выполнил в фоновом режиме и затем уничтожаю их перед рабочим "запуском-dev" снова. Это должно смочь не бросить ошибку, если я закрыл какой-либо из них вручную и не случайно завершаю работу неправильного процесса.

7
задан 5 April 2011 в 19:39

2 ответа

Я занялся бы им что-то вроде этого.

#!/bin/bash  

startme() {
    cd ~/path/to/my/working-directory
    rackup faye.ru -s thin -E production &
    watch refresh.watchr &
    passenger start
}

stopme() {
    pkill -f "rackup faye.ru" 
    pkill -f "watch refresh.watchr"
}

case "$1" in 
    start)   startme ;;
    stop)    stopme ;;
    restart) stopme; startme ;;
    *) echo "usage: $0 start|stop|restart" >&2
       exit 1
       ;;
esac
9
ответ дан 5 April 2011 в 19:39

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

Скрипт выскочки будет отслеживать процесс, но он также позволяет вам записывать события, происходящие до того, как вы их остановите.

stop on runlevel [06]
expect fork
respawn

script
    # run your process here
    # you might want to su to change user from root
end script

pre-stop script
    # things in here will run before the command is halted
end script

Сохраните его как /etc/init/devenvironment.conf, и тогда вы сможете управлять им с помощью:

sudo start devenvironment
sudo stop devenvironment
sudo restart devenvironment
0
ответ дан 5 April 2011 в 19:39

Другие вопросы по тегам:

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