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

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

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

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

Update

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

1) Введите короткую команду типа «start-dev»

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

Переход в мой рабочий каталог Начало faye в качестве фонового процесса Start watchr как фоновый процесс Начать пассажир

Пока у меня есть это

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

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

4) Введите короткую команду, такую ​​как «restart-dev», которая отслеживает процессы, которые я ранее выполнял в фоновом режиме, а затем убивал их перед запуском «start-dev». Он должен быть в состоянии не бросать ошибку, если я отключил любой из них вручную и не случайно выключил неправильный процесс.

6
задан 5 April 2011 в 20:39

22 ответа

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 25 May 2018 в 22:15
  • 1
    Это отлично поработало, но мне пришлось изменить последнюю строку из «done». к "esac". Мне потребовалось несколько секунд, чтобы понять, что, черт возьми, был esac :) – Rupert Madden-Abbott 6 April 2011 в 02:59
  • 2
    @ Руперт, спасибо, мозг. – glenn jackman 6 April 2011 в 04:00
  • 3
    @ Rupert меня тоже, lol. И я использовал сегодня! – H_7 25 March 2012 в 06:11

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 25 July 2018 в 22:15

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 26 July 2018 в 20:07

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 31 July 2018 в 11:20

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 31 July 2018 в 12:20

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 2 August 2018 в 03:43

Я решил бы что-то вроде этого.

#!/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
5
ответ дан 4 August 2018 в 19:47

Я решил бы что-то вроде этого.

  #! / bin / bash startme () {cd ~ / path / to / my / work-directory rackup faye.ru -s  тонкий -E-производство & amp;  watch refresh.watchr & amp;  начало пассажира} stopme () {pkill -f "rackup faye.ru" pkill -f "watch refresh.watchr"} случай «$ 1» в начале) startme ;;  stop);  перезапуск) stopme;  startme ;;  *) echo "use: $ 0 start | stop | restart" & gt; & amp; 2 exit 1 ;;  esac  
5
ответ дан 6 August 2018 в 03:51

Я решил бы что-то вроде этого.

  #! / bin / bash startme () {cd ~ / path / to / my / work-directory rackup faye.ru -s  тонкий -E-производство & amp;  watch refresh.watchr & amp;  начало пассажира} stopme () {pkill -f "rackup faye.ru" pkill -f "watch refresh.watchr"} случай «$ 1» в начале) startme ;;  stop);  перезапуск) stopme;  startme ;;  *) echo "use: $ 0 start | stop | restart" & gt; & amp; 2 exit 1 ;;  esac  
5
ответ дан 7 August 2018 в 21:47

Я решил бы что-то вроде этого.

  #! / bin / bash startme () {cd ~ / path / to / my / work-directory rackup faye.ru -s  тонкий -E-производство & amp;  watch refresh.watchr & amp;  начало пассажира} stopme () {pkill -f "rackup faye.ru" pkill -f "watch refresh.watchr"} случай «$ 1» в начале) startme ;;  stop);  перезапуск) stopme;  startme ;;  *) echo "use: $ 0 start | stop | restart" & gt; & amp; 2 exit 1 ;;  esac  
5
ответ дан 10 August 2018 в 10:01

Я решил бы что-то вроде этого.

  #! / bin / bash startme () {cd ~ / path / to / my / work-directory rackup faye.ru -s  тонкий -E-производство & amp;  watch refresh.watchr & amp;  начало пассажира} stopme () {pkill -f "rackup faye.ru" pkill -f "watch refresh.watchr"} случай «$ 1» в начале) startme ;;  stop);  перезапуск) stopme;  startme ;;  *) echo "use: $ 0 start | stop | restart" & gt; & amp; 2 exit 1 ;;  esac  
5
ответ дан 13 August 2018 в 16:21
  • 1
    Это отлично поработало, но мне пришлось изменить последнюю строку из «done». к "esac". Мне потребовалось несколько секунд, чтобы понять, что, черт возьми, был esac :) – Rupert Madden-Abbott 6 April 2011 в 02:59
  • 2
    @ Руперт, спасибо, мозг. – glenn jackman 6 April 2011 в 04:00
  • 3
    @ Rupert меня тоже, lol. И я использовал сегодня! – H_7 25 March 2012 в 06:11

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 25 May 2018 в 22:15
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 25 July 2018 в 22:15
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 26 July 2018 в 20:07
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 31 July 2018 в 11:20
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 31 July 2018 в 12:20
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 2 August 2018 в 03:43
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

Я бы сказал, что вы, вероятно, захотите написать сценарий выскочки для управления этими процессами. 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
3
ответ дан 4 August 2018 в 19:47
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

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

Скрипт с выскочкой будет отслеживать процесс, но он также (! d4)

  stop on runlevel [06] ожидать, что fork respawn script # запустит ваш процесс здесь # вы можете захотеть сменить пользователя от корневого конца скрипта pre  -stop script # вещи здесь будут выполняться до того, как команда будет остановлена ​​end script  

Сохраните это как /etc/init/devenvironment.conf , а затем вы должны быть (d7) sudo start devenvironment sudo stop devenvironment sudo restart devenvironment

3
ответ дан 6 August 2018 в 03:51

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

Скрипт с выскочкой будет отслеживать процесс, но он также (! d4)

  stop on runlevel [06] ожидать, что fork respawn script # запустит ваш процесс здесь # вы можете захотеть сменить пользователя от корневого конца скрипта pre  -stop script # вещи здесь будут выполняться до того, как команда будет остановлена ​​end script  

Сохраните это как /etc/init/devenvironment.conf , а затем вы должны быть (d7) sudo start devenvironment sudo stop devenvironment sudo restart devenvironment

3
ответ дан 7 August 2018 в 21:47

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

Скрипт с выскочкой будет отслеживать процесс, но он также (! d4)

  stop on runlevel [06] ожидать, что fork respawn script # запустит ваш процесс здесь # вы можете захотеть сменить пользователя от корневого конца скрипта pre  -stop script # вещи здесь будут выполняться до того, как команда будет остановлена ​​end script  

Сохраните это как /etc/init/devenvironment.conf , а затем вы должны быть (d7) sudo start devenvironment sudo stop devenvironment sudo restart devenvironment

3
ответ дан 10 August 2018 в 10:01

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

Скрипт с выскочкой будет отслеживать процесс, но он также (! d4)

  stop on runlevel [06] ожидать, что fork respawn script # запустит ваш процесс здесь # вы можете захотеть сменить пользователя от корневого конца скрипта pre  -stop script # вещи здесь будут выполняться до того, как команда будет остановлена ​​end script  

Сохраните это как /etc/init/devenvironment.conf , а затем вы должны быть (d7) sudo start devenvironment sudo stop devenvironment sudo restart devenvironment

3
ответ дан 13 August 2018 в 16:21
  • 1
    Спасибо Оли. Upstart выглядит интересно, но документация не казалась сосредоточенной на моем случае использования, и я не мог понять это. В конце концов я пошел на быстрое и грязное решение bash, но я обязательно посмотрю на изучение выскочки, поскольку он выглядит очень полезным. – Rupert Madden-Abbott 6 April 2011 в 03:00

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

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