daemonite 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/daemonite.gemspec +1 -1
- data/lib/daemonite.rb +56 -39
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 110be5d9b8265d48d494af41bbf77147f4e3888d
|
4
|
+
data.tar.gz: 3e5a0e19ce757b0ef8b9c0ed330c730b210825da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fc91737dab032004750c06f03c7da6df133657ecda5a88a0b52e431999e86ea60d3b92e914bc6fba74ee68af11da5eb39b8902a23f3a9d5c8993e04a5573bc4
|
7
|
+
data.tar.gz: 25df84c14bd7d4f429be0e37faffe4bee2262d86d87f86d445b8a41747a845825457ee37738d19055c2168f6207d519bb1b73f84c03000fd0d0a6481cca97ab4
|
data/Rakefile
CHANGED
data/daemonite.gemspec
CHANGED
data/lib/daemonite.rb
CHANGED
@@ -18,58 +18,65 @@
|
|
18
18
|
require 'optparse'
|
19
19
|
require 'psych'
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
module Daemonism
|
22
|
+
DAEMONISM_DEFAULT_OPTS = {
|
23
23
|
:mode => :debug,
|
24
24
|
:verbose => false,
|
25
25
|
:basepath => File.expand_path(File.dirname($0)),
|
26
26
|
:pidfile => File.basename($0,'.rb') + '.pid',
|
27
27
|
:pidwrite => true,
|
28
28
|
:conffile => File.basename($0,'.rb') + '.conf',
|
29
|
-
:
|
29
|
+
:runtime_cmds => [],
|
30
|
+
:runtime_opts => [],
|
31
|
+
:runtime_proc => nil,
|
32
|
+
:cmdl_info => nil,
|
30
33
|
:cmdl_parsing => true,
|
31
34
|
:cmdl_operation => 'start'
|
32
35
|
}
|
33
36
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
if File.exists?(@opts[:basepath] + '/' + @opts[:conffile])
|
38
|
-
@opts.merge!(Psych::load_file(@opts[:basepath] + '/' + @opts[:conffile]))
|
37
|
+
def daemonism(opts={},&block)
|
38
|
+
if File.exists?(opts[:basepath] + '/' + opts[:conffile])
|
39
|
+
opts.merge!(Psych::load_file(opts[:basepath] + '/' + opts[:conffile]))
|
39
40
|
end
|
41
|
+
Dir.chdir(opts[:basepath])
|
42
|
+
|
43
|
+
# set more default options and do other stuff
|
44
|
+
instance_exec(opts,&block) if block_given?
|
40
45
|
|
41
46
|
########################################################################################################################
|
42
47
|
# parse arguments
|
43
48
|
########################################################################################################################
|
44
|
-
if
|
45
|
-
|
49
|
+
if opts[:cmdl_parsing]
|
50
|
+
opts[:cmdl_operation] = "start"
|
46
51
|
ARGV.options { |opt|
|
47
52
|
opt.summary_indent = ' ' * 4
|
48
|
-
opt.banner = "Usage:\n#{opt.summary_indent}ruby #{$PROGRAM_NAME} [options] start|stop|restart|info" + (
|
49
|
-
|
53
|
+
opt.banner = "Usage:\n#{opt.summary_indent}ruby #{$PROGRAM_NAME} [options] start|stop|restart|info" + (opts[:runtime_cmds].length > 0 ? '|' : '') + opts[:runtime_cmds].map{|ro| ro[0]}.join('|') + "\n"
|
54
|
+
opts[:runtime_opts].each do |ro|
|
55
|
+
opt.on(*ro)
|
56
|
+
end
|
57
|
+
opt.on("--verbose", "-v", "Do not daemonize. Write ouput to console.") { opts[:verbose] = true }
|
50
58
|
opt.on("--help", "-h", "This text.") { puts opt; exit }
|
51
59
|
opt.separator(opt.summary_indent + "start|stop|restart|info".ljust(opt.summary_width+1) + "Do operation start, stop, restart or get information.")
|
52
|
-
|
60
|
+
opts[:runtime_cmds].each do |ro|
|
53
61
|
opt.separator(opt.summary_indent + ro[0].ljust(opt.summary_width+1) + ro[1])
|
54
62
|
end
|
55
63
|
opt.parse!
|
56
64
|
}
|
57
|
-
unless (%w{start stop restart info} +
|
65
|
+
unless (%w{start stop restart info} + opts[:runtime_cmds].map{|ro| ro[0] }).include?(ARGV[0])
|
58
66
|
puts ARGV.options
|
59
67
|
exit
|
60
68
|
end
|
61
|
-
|
69
|
+
opts[:cmdl_operation] = ARGV[0]
|
62
70
|
@at_exit = nil
|
63
71
|
end
|
64
72
|
########################################################################################################################
|
65
|
-
|
66
|
-
|
67
|
-
instance_exec(@opts,&block) if block_given?
|
73
|
+
opts[:repeat] = nil
|
74
|
+
opts[:runtime_proc].call(opts) unless opts[:runtime_proc].nil?
|
68
75
|
|
69
76
|
########################################################################################################################
|
70
77
|
# status and info
|
71
78
|
########################################################################################################################
|
72
|
-
pid = File.read(
|
79
|
+
pid = File.read(opts[:basepath] + '/' + opts[:pidfile]).to_i rescue pid = -1
|
73
80
|
status = Proc.new do
|
74
81
|
begin
|
75
82
|
Process.getpgid pid
|
@@ -78,12 +85,12 @@ class Daemonite
|
|
78
85
|
false
|
79
86
|
end
|
80
87
|
end
|
81
|
-
if
|
82
|
-
puts "Server not running"
|
88
|
+
if opts[:cmdl_operation] == "info" && status.call == false
|
89
|
+
puts "Server #{opts[:cmdl_info].nil? ? ' ' : '(' + opts[:cmdl_info].to_s + ') '}not running"
|
83
90
|
exit
|
84
91
|
end
|
85
|
-
if
|
86
|
-
puts "Server running as #{pid}"
|
92
|
+
if opts[:cmdl_operation] == "info" && status.call == true
|
93
|
+
puts "Server #{opts[:cmdl_info].nil? ? ' ' : '(' + opts[:cmdl_info].to_s + ') '}running as #{pid}"
|
87
94
|
begin
|
88
95
|
stats = `ps -o "vsz,rss,lstart,time" -p #{pid}`.split("\n")[1].strip.split(/ +/)
|
89
96
|
puts "Virtual: #{"%0.2f" % (stats[0].to_f/1024)} MiB"
|
@@ -94,51 +101,61 @@ class Daemonite
|
|
94
101
|
end
|
95
102
|
exit
|
96
103
|
end
|
97
|
-
if %w{start}.include?(
|
98
|
-
puts "Server already started"
|
104
|
+
if %w{start}.include?(opts[:cmdl_operation]) && status.call == true
|
105
|
+
puts "Server #{opts[:cmdl_info].nil? ? ' ' : '(' + opts[:cmdl_info].to_s + ') '}already started"
|
99
106
|
exit
|
100
107
|
end
|
101
108
|
|
102
109
|
########################################################################################################################
|
103
110
|
# stop/restart server
|
104
111
|
########################################################################################################################
|
105
|
-
if %w{stop restart}.include?(
|
112
|
+
if %w{stop restart}.include?(opts[:cmdl_operation])
|
106
113
|
if status.call == false
|
107
|
-
puts "Server maybe not started?"
|
114
|
+
puts "Server #{opts[:cmdl_info].nil? ? ' ' : '(' + opts[:cmdl_info].to_s + ') '}maybe not started?"
|
108
115
|
else
|
109
|
-
puts "Server stopped"
|
116
|
+
puts "Server #{opts[:cmdl_info].nil? ? ' ' : '(' + opts[:cmdl_info].to_s + ') '}stopped"
|
110
117
|
puts "Waiting while server goes down ..."
|
111
118
|
while status.call
|
112
119
|
Process.kill "SIGTERM", pid
|
113
120
|
sleep 0.3
|
114
121
|
end
|
115
122
|
end
|
116
|
-
exit unless
|
123
|
+
exit unless opts[:cmdl_operation] == "restart"
|
117
124
|
end
|
118
125
|
|
119
126
|
########################################################################################################################
|
120
127
|
# go through user defined startup thingis
|
121
128
|
########################################################################################################################
|
122
|
-
|
123
|
-
ro[2].call(status.call) if
|
129
|
+
opts[:runtime_cmds].each do |ro|
|
130
|
+
ro[2].call(status.call) if opts[:cmdl_operation] == ro[0]
|
124
131
|
end
|
125
132
|
|
126
|
-
puts "Server started as PID:#{Process.pid}"
|
127
|
-
Process.daemon(
|
128
|
-
File.write(
|
129
|
-
Dir.chdir(
|
133
|
+
puts "Server #{opts[:cmdl_info].nil? ? ' ' : '(' + opts[:cmdl_info].to_s + ') '}started as PID:#{Process.pid}"
|
134
|
+
Process.daemon(opts[:basepath]) unless opts[:verbose]
|
135
|
+
File.write(opts[:basepath] + '/' + opts[:pidfile],Process.pid) # after daemon, so that we get the forked pid
|
136
|
+
Dir.chdir(opts[:basepath])
|
130
137
|
::Kernel::at_exit do
|
131
|
-
File.unlink(
|
138
|
+
File.unlink(opts[:basepath] + '/' + opts[:pidfile])
|
132
139
|
@at_exit.call if @at_exit
|
133
140
|
end
|
134
141
|
end
|
135
142
|
|
136
|
-
def run(&block)
|
137
|
-
@opts[:repeat] = block
|
138
|
-
end
|
139
143
|
def at_exit(&blk)
|
140
144
|
@at_exit = blk
|
141
145
|
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class Daemonite
|
149
|
+
include Daemonism
|
150
|
+
|
151
|
+
def initialize(opts={},&blk)
|
152
|
+
@opts = DAEMONISM_DEFAULT_OPTS.merge(opts)
|
153
|
+
daemonism @opts, &blk
|
154
|
+
end
|
155
|
+
|
156
|
+
def run(&block)
|
157
|
+
@opts[:repeat] = block
|
158
|
+
end
|
142
159
|
|
143
160
|
def loop!
|
144
161
|
begin
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daemonite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juergen eTM Mangler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Daemonite - Process.daemon and argparse wrapper for loopies.
|
14
14
|
email: juergen.mangler@gmail.com
|