Created
February 8, 2012 19:30
-
-
Save sobstel/1772677 to your computer and use it in GitHub Desktop.
Service task for Mac OS X
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Service < Thor | |
desc "apache", "Apache" | |
def apache(action) | |
service action do |s| | |
s.down { %x[sudo apachectl stop] } | |
s.up { %x[sudo apachectl start] } | |
end | |
end | |
desc "memcached", "Memcached" | |
def memcached(action) | |
launchctl_service action, '/Users/sobstel/Library/LaunchAgents/com.danga.memcached.plist' | |
end | |
desc "mongo", "MongoDB" | |
def mongo(action) | |
launchctl_service action, '/Users/sobstel/Library/LaunchAgents/org.mongodb.mongod.plist' | |
end | |
desc "mysql", "MySQL" | |
def mysql(action) | |
launchctl_service action, '/Users/sobstel/Library/LaunchAgents/com.mysql.mysqld.plist' | |
end | |
desc "pow", "Pow (pow.cx)" | |
def pow(action) | |
launchctl_service action, '/Users/sobstel/Library/LaunchAgents/cx.pow.powd.plist' | |
end | |
desc "redis", "Redis" | |
def redis(action) | |
launchctl_service action, '/Users/sobstel/Library/LaunchAgents/io.redis.redis-server.plist' | |
end | |
private | |
def launchctl_service(action, path) | |
service action do |s| | |
s.down { %x[launchctl unload -w #{path}] } | |
s.up { %x[launchctl load -w #{path}] } | |
end | |
end | |
def service(action) | |
yield(ServiceHandler.new(action)) | |
end | |
class ServiceHandler | |
def initialize(action) | |
@action = action.to_sym | |
end | |
def call_method?(method) | |
case method | |
when :down | |
[:down, :stop, :unload, :restart].include?(@action) | |
when :up | |
[:up, :start, :load, :restart].include?(@action) | |
else | |
false | |
end | |
end | |
def method_missing(m, *args, &block) | |
if call_method?(m) | |
output = block.call | |
status_code = $?.to_i | |
puts output unless output.empty? | |
puts "Action '#{@action}' failed (exit code: #{status_code})" if status_code > 0 | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment