summaryrefslogtreecommitdiff
path: root/dns/dns_balance/files/patch-dns_balance.rb
blob: f23d043f24eb11d3e3332ede8792f494c170659a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
--- dns_balance.rb.orig	Fri Dec 22 12:46:39 2000
+++ dns_balance.rb	Mon Mar  5 16:59:36 2001
@@ -10,6 +10,8 @@
 require 'thread'
 require 'getopts'
 
+$:.unshift "!!PREFIX!!/etc/dns_balance", "!!PREFIX!!/lib/dns_balance"
+
 require 'datatype.rb'
 require 'log_writer.rb'
 require 'util.rb'
@@ -138,9 +140,10 @@
 end
 
 def usage()
-  print "Usage: ruby dns_balance.rb [-lh] [-i ipaddr]\n"
-  print "       -l         print log to stdout\n"
+  print "Usage: dns_balance [-h] [-i ipaddr] [-l logfile] [-p pidfile]\n"
+  print "       -l logfile print log to logfile\n"
   print "       -i ipaddr  listen IP address (default:0.0.0.0)\n"
+  print "       -p pidfile record PID in pidfile\n"
   print "       -h         help message\n"
   exit(111)
 end
@@ -149,9 +152,36 @@
 # main
 
 srand()
-getopts("lh", "i:0.0.0.0")
+getopts("h", "i:0.0.0.0", 'l:', 'p:')
 
 usage() if $OPT_h
+
+exit! if fork
+Process::setsid
+exit! if fork
+STDIN.close
+STDOUT.close
+STDERR.close
+
+$pidfile = nil
+if $OPT_p
+  $pidfile = $OPT_p
+  File::open($pidfile, 'w') { |f| f.puts $$ }
+end
+
+$logout = nil
+if $OPT_l
+  $logout = File::open($OPT_l, 'a+')
+  $logout.sync = true
+end
+
+[0, 2, 3, 5, 10, 13, 15].each do |sig|
+  trap(sig) {
+    File::unlink($pidfile) if $pidfile
+    $logout.close if $logout
+    exit
+  }
+end
 
 put_log("start\n") if $OPT_l