OSDN Git Service

Support backup / restore
[redminele/redminele.git] / script / service.bat
index d3d09c2..6d1dccf 100644 (file)
@@ -5,7 +5,7 @@ ruby -x "%~f0" %*
 goto :end\r
 \r
 #!ruby\r
-require 'yaml'\r
+require 'service'\r
 require 'win32/service'\r
 require 'windows/authorization'\r
 require 'highline/import'\r
@@ -14,8 +14,8 @@ PACKAGE_HOME = File.expand_path(ENV["PACKAGE_HOME"])
 \r
 module Command\r
   def install\r
-    service_names.each {|name|\r
-      if (Win32::Service.status(name) rescue nil)\r
+    Service.names.each {|name|\r
+      if Service.exists?(name)\r
         warn "Error: service #{name} already exists"\r
         exit 1\r
       end\r
@@ -23,7 +23,7 @@ module Command
 \r
     wrapper = File.join(PACKAGE_HOME, "script/wrapper.bat")\r
 \r
-    config.each {|key, conf|\r
+    Service.config.each {|key, conf|\r
       name = conf["service_name"]\r
       port = conf["port"]\r
 \r
@@ -61,7 +61,7 @@ module Command
 \r
   def uninstall\r
     stop(false)\r
-    service_names.each {|name|\r
+    Service.names.each {|name|\r
       next unless status(name)\r
 \r
       begin\r
@@ -75,8 +75,13 @@ module Command
   end\r
 \r
   def start(verbose=true)\r
-    service_names.each {|name|\r
-      next unless s = status(name, verbose)\r
+    Service.names.each {|name|\r
+      s = Service.status(name)\r
+      unless s\r
+        warn "service #{name} is not installed" if verbose\r
+        next\r
+      end\r
+\r
       if s == "running"\r
         warn "service #{name} is already running" if verbose\r
         next\r
@@ -84,8 +89,8 @@ module Command
 \r
       begin\r
         Win32::Service.start(name)\r
-        sleep 0.1 while status(name, false) == "start pending"\r
-        raise if status(name, false) != "running"\r
+        sleep 0.1 while Service.status(name) == "start pending"\r
+        raise if Service.status(name) != "running"\r
         warn "service #{name} started"\r
       rescue\r
         warn "Error: failed to start service #{name}"\r
@@ -95,8 +100,13 @@ module Command
   end\r
 \r
   def stop(verbose=true)\r
-    service_names.each {|name|\r
-      next unless s = status(name, verbose)\r
+    Service.names.each {|name|\r
+      s = Service.status(name)\r
+      unless s\r
+        warn "service #{name} is not installed" if verbose\r
+        next\r
+      end\r
+\r
       if s == "stopped"\r
         warn "service #{name} has already been stopped" if verbose\r
         next\r
@@ -104,7 +114,7 @@ module Command
 \r
       begin\r
         Win32::Service.stop(name)\r
-        sleep 0.1 while status(name, false) != "stopped"\r
+        sleep 0.1 while Service.status(name) != "stopped"\r
         warn "service #{name} stopped"\r
       rescue\r
         warn "Error: failed to stop service #{name}"\r
@@ -118,47 +128,32 @@ module Command
     start\r
   end\r
 \r
-  def status(name=nil, verbose=true)\r
-    if name\r
-      service = Win32::Service.status(name) rescue nil\r
-      warn "service #{name} is not installed" if verbose && service.nil?\r
-      return service && service.current_state\r
-    end\r
-\r
-    service_names.each {|name|\r
-      begin\r
-        status = Win32::Service.status(name).current_state\r
-        warn "#{name}: #{status}"\r
-      rescue\r
-        warn "#{name}: not installed"\r
-      end\r
-    }\r
-    nil\r
-  end\r
 end\r
 \r
 class Service\r
   extend Command\r
 \r
   class << self\r
-    def config\r
-      @config ||= YAML.load_file(File.join(PACKAGE_HOME, "config/service.yml"))\r
-    end\r
-\r
-    def service_names\r
-      @service_names ||= config.values.map {|h| h["service_name"]}\r
-    end\r
-\r
     def usage\r
       warn <<EOT\r
 Usage: service <command>\r
 \r
 Commands:\r
-  #{Command.instance_methods.sort.join("\n  ")}\r
+  #{Command.instance_methods.push("status").sort.join("\n  ")}\r
 EOT\r
       exit 1\r
     end\r
 \r
+    def display_status\r
+      names.each {|name|\r
+        if s = status(name)\r
+          warn "#{name}: #{s}"\r
+        else\r
+          warn "#{name}: not installed"\r
+        end\r
+      }\r
+    end\r
+\r
     def method_missing(name, *args)\r
       warn "Unknown command #{name}"\r
       usage\r
@@ -168,10 +163,12 @@ end
 \r
 (command, pause) = ARGV[0..1]\r
 Service.usage unless command\r
-if %w[install uninstall start stop restart].include?(command)\r
+if command == "status"\r
+  Service.display_status\r
+else\r
   Windows::Authorization.runas_admin\r
+  Service.send(command)\r
 end\r
-Service.send(command)\r
 \r
 ask("Press any key to exit ... ") {|q|\r
   q.character = true\r