Когда я запускаю свою среду разработки, существует множество процессов, которые я должен выполнить в фоновом режиме. Это - боль для запуска их всех индивидуально, таким образом, я хочу записать сценарий, который запускает каждого. Я могу сделать это очень хорошо, но проблема возникает, когда я должен буду перезапустить их (что-то, что я должен буду регулярно делать).
Что является самым легким способом получить процесс после запуска его и сохранения той информации так, чтобы, когда я запускаю скрипт снова, он проверил, чтобы видеть, была ли та информация сохранена и затем закрывает те процессы прежде, чем перезапустить их.
Я также хочу, чтобы сценарий был достаточно гибок таким образом, что, если я завершаю работу процесса вручную, он a) не бросит ошибку, если это не может найти процесс и b) случайно не закроет некоторый другой процесс, который с тех пор поделился любой информацией идентификации, которую я хранил.
Строго говоря, я хочу, по крайней мере, сделать следующее в данный момент:
1) Тип, который любит короткая команда, "запускается-dev"
2) Выполнитесь следующее (Обратите внимание, что я хочу, чтобы вторые и третьи команды работали в фоновом режиме, и использую и сделать так, но не заключительная команда, поскольку я хочу видеть вывод от пассажира, когда это работает):
До сих пор у меня есть это
#!/bin/bash
cd ~/path/to/my/working-directory
rackup faye.ru -s thin -E production &
watch refresh.watchr &
passenger start
Это хорошо работает, но проблема возникает, когда я должен перезапустить все эти процессы. Я сначала должен разыскать все их идентификаторы процесса и затем уничтожить их перед рабочим запуском-dev снова. Поэтому я хотел бы:
4) Введите короткую команду как "перезапуск-dev", который разыскивает процессы, которые я ранее выполнил в фоновом режиме и затем уничтожаю их перед рабочим "запуском-dev" снова. Это должно смочь не бросить ошибку, если я закрыл какой-либо из них вручную и не случайно завершаю работу неправильного процесса.
Я занялся бы им что-то вроде этого.
#!/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
Я бы сказал, что вы, вероятно, хотите попробовать написать сценарий для управления этими процессами. 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