-
Notifications
You must be signed in to change notification settings - Fork 13
/
README
88 lines (59 loc) · 2.21 KB
/
README
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
`hdaemonize-0.2`
=================
`hdaemonize` is a simple library that hides some of the complexities
of writing UNIX daemons in Haskell.
Obtaining
-----------
The latest version is available (BSD license) at
[GitHub](http://github.com/toyvo/hdaemonize/tree/master).
Using
-------
The synopsis is:
import System.Posix.Daemonize
main = daemonize $ program
This code will make `program` do what good daemons should do, that is,
detach from the terminal, close file descriptors, create a new process
group, and so on.
If you want more functionality than that, it is available as a
`serviced` function.
Here is an example:
import Control.Concurrent
import System.Posix.Daemonize
loop i log = do threadDelay $ 10^6
log (show i)
writeFile "/tmp/counter" $ show i
if i == 5 then undefined else loop (i + 1) log
main = serviced (loop 0)
Let us say this program is compiled as `mydaemon`. Then:
# mydaemon start
starts the service. A second call to start will complain that the
program is already running.
During its execution, mydaemon will simply write a new number to
`/tmp/counter` every second, until it reaches 5. Then, an exception
will be thrown. This exception will be caught by `hdaemonize`, and
logged to `/var/log/daemon.log` or similar (this is depends on how
`syslog` works on your platorm). `log (show i)` will leave messages
in the same file.
When the exception is thrown, the program will be restared in 5
seconds, and will start counting from 0 again.
The following commands are also made available:
# mydaemon stop
# mydaemon restart
Finally, `mydaemon` drops privileges. By default it changes the
effective user and group ids to those of the `daemon` user, but it
prefers to use those of `mydaemon`, if present.
Changelog
---------
* 0.3
* merged with updates by madhadron
* 0.2
* provided documentation
* backported to older GHC versions, tested on 6.8.1
* 0.1
* initial public release
Authors
-------
Anton Tayanovskyy <[email protected]>, bug reports and feature
requests welcome.
The code is originally based on a public posting by
[Andre Nathan](http://sneakymustard.com/), used by permission.