Module Lwt_daemon
module Lwt_daemon : sig..end
Daemon helpers
val daemonize :
?syslog:bool ->
?stdin:[ `Close | `Dev_null | `Keep ] ->
?stdout:[ `Close
| `Dev_null
| `Keep
| `Log of Lwt_log.logger
| `Log_default ] ->
?stderr:[ `Close
| `Dev_null
| `Keep
| `Log of Lwt_log.logger
| `Log_default ] ->
?directory:string -> ?umask:[ `Keep | `Set of int ] -> unit -> unit
Put the current running process into daemon mode. I.e. it forks and exit the parent, detach it from its controlling terminal, and redict standard intputs/outputs..
Notes:
- you must be sure that there is no pending threads when calling this function, otherwise they may be canceled.
If syslog is true (the default), then Lwt_log.default is set to Lwt_log.syslog ~facility:`Daemon (), otherwise it is kept unchanged.
stdin is one of:
- `Dev_null which means that Unix.stdin is reopened as /dev/null, this is the default behavior
- `Close means that Unix.stdin is simply closed
- `Keep means that Unix.stdin is left unchanged
stdout and stderr control how the two associated file descriptors are redirected:
- `Dev_null means that the output is redirected to /dev/null
- `Close means that the file descriptor is closed
- `Keep means that it is left unchanged
- `Log logger means that the output is redirected to this logger
- `Log_default means that the output is redirected to the default logger
Both stdout and stderr default to `Log_default.
Warning: do not redirect an output to a logger logging into this output. For example, this code will create an infinite loop:
let logger = Lwt_log.channel ~close_mode:`Keep ~channel:Lwt_io.stderr () in
Lwt_daemon.daemonize ~syslog:false ~stderr:(`Log logger) ();
prerr_endline "foo"
The current working directory is set to directory, which defaults to "/".
umask may be one of:
- `Keep which means that the umask is left unchanged
- `Set n which means that the umask is set to n
It defaults to `Set 0o022.