1Daemon::Generic(3) User Contributed Perl Documentation Daemon::Generic(3)
2
3
4
6 Daemon::Generic - framework to provide start/stop/reload for a daemon
7
9 use Daemon::Generic;
10
11 sub gd_run { ... stuff }
12
13 newdaemon();
14
16 Daemon::Generic provides a framework for starting, stopping,
17 reconfiguring daemon-like programs. The framework provides for
18 standard commands that work for as init.d files and as apachectl-like
19 commands.
20
21 Programs that use Daemon::Generic subclass Daemon::Generic to override
22 its behavior. Almost everything that Genric::Daemon does can be
23 overridden as needed.
24
26 Unless overridden, the usage output for your program will look
27 something like this:
28
29 Usage: $progname [ -c file ] [ -f ] { start | stop | reload | restart | help | version | check }
30 -c Specify configuration file (defaults to $configfile)
31 -f Run in the foreground (don't detach)
32 start Starts a new $progname if there isn't one running already
33 stop Stops a running $progname
34 reload Causes a running $progname to reload it's config file. Starts
35 a new one if none is running.
36 restart Stops a running $progname if one is running. Starts a new one.
37 check Check the configuration file and report the daemon state
38 help Display this usage info
39 version Display the version of $progname
40
42 To hand control over to "Daemon::Generic", call newdaemon(). Control
43 will be handed back through method calls to functions you define.
44
45 Your @ISA will be modified to include "Daemon::Generic" if if it isn't
46 already there.
47
48 These are the arguments to newdaemon(). Defaults are in (parenthesis).
49
50 progname ($0) The name of this program. This will be used for
51 logging and for naming the PID file.
52
53 configfile ("/etc/$progname.conf") The location of the
54 configuration file for this daemon.
55
56 pidbase (/var/run/$progname) We include the configuration file
57 name as part of the pid file in case there are multiple
58 instances of this daemon. The pidbase is the part of
59 the PID file that does not include the configuration
60 file name.
61
62 pidfile ("$pidbase.$configfile.pid") The location of the process
63 id file.
64
65 foreground (0) Do not detach/daemon and run in the foreground
66 instead.
67
68 debug (0) Turn on debugging.
69
70 no_srand (0) Normall srand() is called. If no_srand is set then
71 srand() won't be called.
72
73 options () Additional arguments for Getopt::Long::GetOptions
74 which is used to parse @ARGV. Alternatively: define
75 &gd_more_opt().
76
77 minimum_args (1) Minimum number of @ARGV arguments after flags have
78 been processed.
79
80 maximum_args (1) Maximum number of @ARGV arguments after flags have
81 been processed.
82
83 version ($pkg::VERSION) The version number of the daemon.
84
85 logpriority Used for "logger -p".
86
88 The package that subclasses Daemon::Generic must provide the following
89 callback methods.
90
91 gd_run() This is where you put your main program.
92
93 It is okay to change userid/group as the first action of
94 gd_run().
95
97 The package that subclasses Daemon::Generic does not have to override
98 these methods but it may want to.
99
100 gd_preconfig() gd_preconfig() is called to parse the configuration file
101 ("$self->{configfile}"). Preconfig is called on all
102 invocations of the daemon ("daemon reload", "daemon
103 check", "daemon stop", etc). It shouldn't start
104 anything but it can and should verify that the config
105 file is fine.
106
107 The return value should be a hash. With one exception,
108 the return value is only used by gd_postconfig(). The
109 exception is that gd_preconfig() may return a revised
110 PID file location (key "pidfile").
111
112 Most uses of Daemon::Generic should define
113 "gd_preconfig".
114
115 gd_postconfig(%config)
116 Postconfig() is called only when the daemon is actually
117 starting up. (Or on reconfigs). It is passed the
118 return value from "gd_preconfig".
119
120 gd_setup_signals()
121 Set things up so that SIGHUP calls gd_reconfig_event()
122 and SIGINT calls gd_quit_event(). It will call these at
123 any time so if you want to delay signal delivery or
124 something you should override this method.
125
126 gd_getopt() This is invoked to parse the command line. Useful
127 things to modify are:
128
129 $self->{configfile} The location of the configuration
130 file to be parsed by gd_preconfig().
131
132 $self->{foreground} Run in the foreground (don't
133 daemonize).
134
135 $self->{debug} Use it yourself.
136
137 The supplied gd_getopt() method uses Getopt::Long.
138
139 gd_parse_argv()
140 Parse any additional command line arguments beyond what
141 gd_getopt() handled.
142
143 $ARGV[0] needs to be left alone if it is one of the
144 following standard items:
145
146 start Start up a new daemon.
147
148 stop Stop the running daemon.
149
150 restart Stop the running daemon, start a new one.
151
152 reload Send a signal to the running daemon, asking it
153 to reconfigure itself.
154
155 check Just check the configuration file.
156
157 help Print the help screen (probably usage()).
158
159 version Display the daemon's version.
160
161 There is no default gd_parse_argv().
162
163 gd_check($pidfile, $pid)
164 Normal behavior: return. Define additional checks to
165 run when the "check" command is given. A $pid will only
166 be supplied if there is a daemon running.
167
168 gd_version() Normal behavior: display a version message and exit.
169
170 gd_help() Normal behavior: call gd_usage().
171
172 gd_commands_more()
173 Used by gd_usage(): provide information on additional
174 commands beyond "start", "stop", "reload", etc. Return
175 is an array of key value pairs.
176
177 sub gd_commands_more
178 {
179 return (
180 savestate => 'Tell xyz server to save its state',
181 reset => 'Tell xyz servr to reset',
182 );
183 }
184
185 gd_flags_more Like gd_commands_more() but defines additional command
186 line flags. There should also be a gd_more_opt() or an
187 "options" argument to new().
188
189 gd_positional_more
190 Like gd_commands_more() but defines positional
191 arguments.
192
193 gd_usage() Display a usage message. The return value from
194 gd_usage() is the exit code for the program.
195
196 gd_more_opt() () Additional arguments for Getopt::Long::GetOptions
197 which is used to parse @ARGV. Alternatively: pass
198 "options" to new().
199
200 gd_pidfile() Figure out the PID file should be.
201
202 gd_error() Print out an error (call die?)
203
204 gd_other_cmd() Called $ARGV[0] isn't one of the commands that
205 Daemon::Generic knows by default. Default behavior:
206 call gd_usage() and exit(1).
207
208 gd_daemonize() Normal behavior: fork(), fork(), detach from tty.
209
210 gd_redirect_output()
211 This is a mis-named method. Sorry. This directs
212 "STDOUT"/"STDERR"/"STDIN" to "/dev/null" as part of
213 daemonizing. Used by gd_daemonize().
214
215 gd_reopen_output()
216 After daemonizing, output file descriptors are be re-
217 established. Normal behavior: redirect "STDOUT" and
218 "STDERR" to "logger -t $progname[$$]". Used by
219 gd_daemonize().
220
221 gd_logname() Normal behavior: $progname[$$]. Used by
222 gd_redirect_output().
223
224 gd_reconfig_event()
225 Normal behavior: call "gd_postconfig(gd_preconfig))".
226 Only referenced by gd_setup_signals().
227
228 gd_quit_event()
229 Normal behavior: exit. Only referenced by
230 gd_setup_signals().
231
232 gd_kill_groups()
233 Return true if gd_kill should kill process groups ($pid)
234 instead of just the one daemon ($pid). Default is
235 false.
236
237 gd_kill($pid) Used by the "stop" and "restart" commands to get rid of
238 the old daemon. Normal behavior: send a SIGINT. Check
239 to see if process $pid has died. If it has not, keep
240 checking and if it's still alive. After
241 $Daemon::Generic::force_quit_delay seconds, send a
242 SIGTERM. Keep checking. After another
243 $Daemon::Generic::force_quit_delay seconds, send a
244 SIGKILL (-9). Keep checking. After
245 "$Daemon::Generic::force_quit_delay * 4" seconds or 60
246 seconds (whichever is smaller), give up and exit(1).
247
248 gd_install Installs the daemon so that it runs automatically at
249 next reboot. Currently done with a symlink to $0 and
250 "/usr/sbin/update-rc.d". Please send patches for other
251 methods!
252
253 gd_can_install Returns a function to do an "gd_install" if installation
254 is possible. Returns 0 otherwise.
255
256 gd_install_pre($method)
257 Normal behavior: return. Called just before doing an
258 installation. The method indicates the installation
259 method (currently always "update-rc.d".)
260
261 gd_install_post($method)
262 Normal behavior: return. Called just after doing an
263 installation.
264
265 gd_uninstall Will remove the daemon from the automatic startup
266 regime.
267
268 gd_can_uninstall
269 Returns a function to do the work for "gd_uninstall" if
270 it's possible. 0 otherwise.
271
272 gd_uninstall_pre($method)
273 Normal behavior: return. Called just before doing an
274 un-installation. The method indicates the installation
275 method (currently always "update-rc.d".)
276
277 gd_install_post($method)
278 Normal behavior: return. Called just after doing an un-
279 installation.
280
282 Since you need to subclass Daemon::Generic, you need to know what the
283 internal data structures for Daemon::Generic are. With two exceptions,
284 all of the member data items begin with the prefix "gd_".
285
286 configfile The location of the configuration file. (Not used by
287 Daemon::Generic).
288
289 debug Display debugging? (Not used by Daemon::Generic)
290
291 gd_args The original %args passed to "new".
292
293 gd_progname The process name. (defaults to $0)
294
295 gd_pidfile The location of the process ID file.
296
297 gd_logpriority Used for "logger -p".
298
299 gd_foreground Are we running in the foreground?
300
302 my $sleeptime = 1;
303
304 newdaemon(
305 progname => 'ticktockd',
306 pidfile => '/var/run/ticktockd.pid',
307 configfile => '/etc/ticktockd.conf',
308 );
309
310 sub gd_preconfig
311 {
312 my ($self) = @_;
313 open(CONFIG, "<$self->{configfile}") or die;
314 while(<CONFIG>) {
315 $sleeptime = $1 if /^sleeptime\s+(\d+)/;
316 }
317 close(CONFIG);
318 return ();
319 }
320
321 sub gd_run
322 {
323 while(1) {
324 sleep($sleeptime);
325 print scalar(localtime(time))."\n";
326 }
327 }
328
330 With a while(1) and delayed signal delivery: Daemon::Generic::While1.
331
332 With Event: Daemon::Generic::Event.
333
334 With AnyEvent: Daemon::Generic::AnyEvent.
335
336 Modules that use Daemon::Generic: SyslogScan::Daemon; IO::Event
337 (rinetd.pl)
338
339 Other modules that do similar things: Net::Daemon, Net::Server,
340 Net::Server::Daemonize, NetServer::Generic, Proc::Application::Daemon,
341 Proc::Daemon, Proc::Forking.
342
344 Copyright (C) 2006-2010 David Muir Sharnoff <cpan@dave.sharnoff.org>.
345 Copyright (C) 2011 Google, Inc. This module may be used and
346 distributed on the same terms as Perl itself.
347
349 Daemon::Generic is packaged for Fedora by Emmanuel Seyman
350 <emmanuel.seyman@club-internet.fr>.
351
352
353
354perl v5.38.0 2023-07-20 Daemon::Generic(3)