проблемы утилиты appleScript / bash / обнаружение процессов - PullRequest
0 голосов
/ 05 июля 2011

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

Теперь вот яблочный скрипт, который я использую для него:

on run {input, parameters}

set apache2state to (do shell script "/bin/ps -arx |/usr/bin/grep apache2 |wc -l")
repeat until apache2state does not start with " "
    set apache2state to text 2 thru -1 of apache2state
end repeat
if apache2state is equal to "3" then
    do shell script "/opt/local/bin/port load apache2" with administrator privileges
else
    do shell script "/opt/local/bin/port unload apache2" with administrator privileges
end if

end run

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

Есть ли лучший способ проверить, работает ли apache (и mysql, у меня точно такой же скрипт). Проблема в том, что когда они отключены, команда оболочки будет возвращать целочисленное значение точно так же (а не только 1 для процесса grep ..)

спасибо

ИЗМЕНЕНО, чтобы указать, что решение здесь работает плохо, поскольку grep будет возвращать любой экземпляр потоков apache и любой другой процесс, который говорит apache (например, tail -r /var/log/apache2/error.log).

1 Ответ

1 голос
/ 05 июля 2011

Состояние службы можно проверить с помощью следующей команды:

/sbin/service --test-if-configured-on "org.apache.httpd"

Однако это может не работать для служб, установленных с MacPorts.

Также см. Ответ на этот вопрос .

Поскольку команда service устарела в Snow Leopard, вы также можете использовать launchctl , чтобы получить рабочее состояние службы. Команду можно вызвать из AppleScript следующим образом:

try
    do shell script "/bin/launchctl list | grep -q org.apache.httpd" with administrator privileges
    set apache2Running to true
on error
    set apache2Running to false
end try
...