Терминальная команда: запустить или остановить процесс, если он запущен или нет - PullRequest
2 голосов
/ 18 ноября 2011

У меня установлена ​​glassfish, и я хотел бы, чтобы простая команда терминала проверяла, работает ли она.Если это так, он остановит процесс.Или, если он не работает, он запустит сервер.

Чтобы запустить сервер, я могу ввести:

/Applications/NetBeans/glassfish-3.1.1/bin/./asadmin start-domain domain

Чтобы остановить сервер, я могу ввести:

/Applications/NetBeans/glassfish-3.1.1/bin/.asadmin stop-domain domain

Я хотел бы создать простой скрипт Alfred.app, который сможет запустить этот домен, если он не запущен, или остановить его, если он запущен.

1 Ответ

1 голос
/ 02 августа 2012

Один из способов сделать это - записать в файл идентификатор процесса сервера, когда он запускается, и выполнить другой скрипт для проверки, запущен ли этот процесс.

Например, скрипт A (длязапустить сервер безоговорочно):

#!/bin/sh
/Applications/NetBeans/glassfish-3.1.1/bin/./asadmin start-domain domain
# file name is arbitrary
pgrep whateverTheProcessNameIs > ~/.glassfish-server.pid

И в сценарии B:

#!/bin/sh
pid=`pgrep -F ~/.glassfish-server.pid` # file chosen in script A
if [ "x$pid" = "x" ] ; then
  # process has died; restart by running script A
  /path/to/scriptA
fi

Обратите внимание, что только Mac OS X 10.8 (Mountain Lion) по умолчанию устанавливает pgrep;в противном случае вам придется использовать какой-либо другой метод (например, анализ ps output), чтобы увидеть, какие процессы запущены.

Что касается периодического запуска этой проверки, существуют различные способы.Я предполагаю, что Альфред запустит любой исполняемый скрипт (chmod +x scriptA scriptB), но я точно не знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...