2011-07-05 12 views
0

私は起動とApache(mysqlのための別のもの)を終了するのに役立つ小さな自動化アプリケーションを作ったので、私はターミナルに行く必要はありませんその怠け者)。今ここapplescriptユーティリティの問題/ bash /プロセスの検出

は、私はそれのために使用するAppleScriptです:

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プロセス...)ここthattheソリューションを指定ひどく働いていたように編集

おかげ

grepはApacheのスレッドのインスタンスと、apacheと言った他のプロセス(tail -r /var/log/apache2/error.logなど)を返すためです。

答えて

1

サービスの実行状態は、次のコマンドを使用してテストすることができます:

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

しかし、これはMacPortsをインストールしてサービスのために動作しない場合があります。

this questionの回答も参照してください。

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 
+0

サービスは本質的に、それはまだいくつかの情報を与えるので、ユキヒョウで非推奨ですが、完全ではない、私は、代替と私の答えを更新しました – cromestant

+0

@cromestantけれども感謝されますSnow Leopardのソリューション。 – sakra

+0

ありがとう、私はちょうど同様にlaunchctlリストを使用して同様の答えを投稿するつもりだった。ありがとうございました – cromestant