open Unix
open Printf
+(* Ensures that Whentools module is linked to the daemon. *)
+let _ = Whentools.set_variable
+
let () =
(* Running the daemon as root is a mistake. It must be run as a
* non-root user.
(* chdir / so we don't prevent filesystems from being unmounted. *)
chdir "/";
- (* Close file descriptors. *)
+ (* Close file descriptors, replace with /dev/null. *)
close stdin;
close stdout;
close stderr;
+ ignore (openfile "/dev/null" [O_RDONLY] 0);
+ ignore (openfile "/dev/null" [O_WRONLY] 0);
+ ignore (openfile "/dev/null" [O_WRONLY] 0);
(* Create a new session. *)
ignore (setsid ());
);
(* Start syslog. *)
- Syslog.notice "daemon started: uid=%d home=%s" euid home;
+ Syslog.notice "daemon started: version=%s uid=%d home=%s"
+ Config.package_version euid home;
- (* If there is a jobs.cmo file, load it. *)
+ (* If there is a jobs.cmo/jobs.cmxs file, load it. *)
let () =
- let file = sprintf "%s/jobs.cmo" jobsdir in
+ let suffix = if not Dynlink.is_native then "cmo" else "cmxs" in
+ let file = sprintf "%s/jobs.%s" jobsdir suffix in
if Sys.file_exists file then
- try Daemon.reload_file () with Failure _ -> () in
+ try Daemon.reload_files () with Failure _ -> () in
(* Go into main loop. *)
Daemon.main_loop ()