OSDN Git Service

[shogi-server] Create a directory for a PID file. (Closes #38546)
[shogi-server/shogi-server.git] / shogi-server
index b5e1ecf..f1cfbb3 100755 (executable)
@@ -34,6 +34,7 @@ require 'shogi_server'
 require 'shogi_server/config'
 require 'shogi_server/util'
 require 'shogi_server/league/floodgate_thread.rb'
+require 'pathname'
 require 'tempfile'
 
 #################################################
@@ -82,6 +83,8 @@ OPTIONS
                 Least time in second per move: 0, 1 (default 1).
                   - 0: The new rule that CSA introduced in November 2014.
                   - 1: The old rule before it.
+        --max-identifier n
+               maximum length of an identifier
         --max-moves n
                 when a game with the n-th move played does not end, make the game a draw.
                 Default 256. 0 disables this feature.
@@ -121,6 +124,21 @@ EXAMPLES
            floodgate-0-240.conf.sample or shogi_server/league/floodgate.rb 
            for format details.
 
+GRACEFUL SHUTDOWN
+
+       A file named "STOP" in the base directory prevents the server from
+       starting new games including Floodgate matches.
+       When you want to stop the server gracefully, first, create a STOP file
+
+          $ touch STOP
+
+       then wait for a while until all the running games complete.
+       Now you can stop the process with no game interruptted by the 'kill'
+       command.
+
+       Note that when a server gets started, a STOP file, if any, will be
+       deleted automatically.
+
 FLOODGATE SCHEDULE CONFIGURATIONS
 
            You need to set starting times of floodgate groups in
@@ -206,6 +224,7 @@ def parse_command_line
     ["--daemon",              GetoptLong::REQUIRED_ARGUMENT],
     ["--floodgate-games",     GetoptLong::REQUIRED_ARGUMENT],
     ["--least-time-per-move", GetoptLong::REQUIRED_ARGUMENT],
+    ["--max-identifier",      GetoptLong::REQUIRED_ARGUMENT],
     ["--max-moves",           GetoptLong::REQUIRED_ARGUMENT],
     ["--pid-file",            GetoptLong::REQUIRED_ARGUMENT],
     ["--player-log-dir",      GetoptLong::REQUIRED_ARGUMENT])
@@ -253,6 +272,8 @@ def check_command_line
 
   if $options["pid-file"] 
     $options["pid-file"] = File.expand_path($options["pid-file"], $topdir)
+    path = Pathname.new($options["pid-file"])
+    path.dirname().mkpath()
     unless ShogiServer::is_writable_file? $options["pid-file"]
       usage
       $stderr.puts "Can not create the pid file: %s" % [$options["pid-file"]]
@@ -281,6 +302,9 @@ def check_command_line
   $options["max-moves"] ||= ShogiServer::Default_Max_Moves
   $options["max-moves"] = $options["max-moves"].to_i
 
+  $options["max-identifier"] ||= ShogiServer::Default_Max_Identifier_Length
+  $options["max-identifier"] = $options["max-identifier"].to_i
+
   $options["least-time-per-move"] ||= ShogiServer::Default_Least_Time_Per_Move
   $options["least-time-per-move"] = $options["least-time-per-move"].to_i
 end
@@ -452,6 +476,11 @@ def main
   $stderr.puts("server started as a deamon [Revision: #{ShogiServer::Revision}]") if $options["daemon"] 
   log_message("server started [Revision: #{ShogiServer::Revision}]")
 
+  if ShogiServer::STOP_FILE.exist?
+    log_message("Deleted the STOP file")
+    ShogiServer::STOP_FILE.delete
+  end
+
   server.start do |client|
     begin
       # client.sync = true # this is already set in WEBrick