Persist variables to file (~/.whenjobs/variables).
[whenjobs.git] / daemon / whenjobsd.ml
index 3f9fe89..4846279 100644 (file)
@@ -19,6 +19,9 @@
 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.
@@ -101,10 +104,13 @@ Options:
     (* 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 ());
@@ -117,14 +123,11 @@ Options:
   );
 
   (* Start syslog. *)
-  Syslog.notice "daemon started: version=%s uid=%d home=%s"
-    Config.package_version euid home;
-
-  (* If there is a jobs.cmo file, load it. *)
-  let () =
-    let file = sprintf "%s/jobs.cmo" jobsdir in
-    if Sys.file_exists file then
-      try Daemon.reload_file () with Failure _ -> () in
+  Syslog.notice "daemon started: version=%s uid=%d home=%s native=%b"
+    Config.package_version euid home Dynlink.is_native;
+
+  (* If there is a jobs__*.cmo/jobs__*.cmxs file, load it. *)
+  (try Daemon.reload_files () with Failure _ -> ());
 
   (* Go into main loop. *)
   Daemon.main_loop ()