X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=main.ml;h=7f91dbf967fa9f18cbacd8efd42a627eabea6100;hb=0a4a3a68d48188e50ae321557f4527a8dffaf73a;hp=534f9159777c668811bd0daeb0bdc901015ae961;hpb=c9636f84acdab799ccfc5d50824138db70d0a5d3;p=vsys.git diff --git a/main.ml b/main.ml index 534f915..7f91dbf 100644 --- a/main.ml +++ b/main.ml @@ -15,41 +15,57 @@ let cmdspeclist = [ ("-daemon",Arg.Set(daemonize), "Daemonize"); ("-conffile",Arg.Set_string(Globals.conffile), "Config file"); + ("-logfile",Arg.Set_string(Globals.log_filepath), "Log file"); ("-backend",Arg.Set_string(Globals.backend), "Backend directory"); - ("-frontend",Arg.Tuple[Arg.String(fun s->cur_dir:=s);Arg.String(fun s->cur_slice:=s;input_file_list:=(!cur_dir,!cur_slice)::!input_file_list)], "frontendN,slicenameN"); - ("-nochroot",Arg.Set(Globals.nochroot), "Run in non-chroot environment") + ("-frontend",Arg.Tuple[Arg.String(fun s->cur_dir:=s); + Arg.String(fun s->cur_slice:=s; + input_file_list:=(!cur_dir,!cur_slice)::!input_file_list)], + "frontendN,slicenameN"); + ("-nochroot",Arg.Set(Globals.nochroot), "Run in non-chroot environment"); + ("-failsafe",Arg.Set(Globals.failsafe), "Never crash. Be stupid, but never crash. Use at your own risk."); ] -let cont = ref true +let sighup_handle s = + print "Received sighup. Running GC major pass"; + Gc.major () let _ = - printf "Vsys v%s\n" Globals.vsys_version;flush stdout; Arg.parse cmdspeclist (fun x->()) "Usage: vsys "; + Globals.logfd:=open_out_gen [Open_append;Open_creat] 0o644 !log_filepath; if (!Globals.backend == "") then - printf "Try vsys --help\n" + printf "Try vsys --help\n" else begin + logprint "Starting Vsys v%s\n" Globals.vsys_version; if (!daemonize) then begin - printf "Daemonizing\n";flush Pervasives.stdout; - let child = Unix.fork () in - if (child <> 0) then - begin + print "Daemonizing\n"; + let child = Unix.fork () in + if (child <> 0) then + begin let pidfile = open_out !Globals.pid_filepath in fprintf pidfile "%d" child; - close_out pidfile; - exit(0) - end - end; + close_out pidfile; + exit(0) + end + end; - Dirwatcher.initialize (); - if (!Globals.conffile <> "") then - begin - let frontends = Conffile.read_frontends !Globals.conffile in - input_file_list:=List.concat [!input_file_list;frontends] - end; + Dirwatcher.initialize (); + Directfifowatcher.initialize (); + + if (!Globals.conffile <> "") then + begin + let frontends = Conffile.read_frontends !Globals.conffile in + input_file_list:=List.concat [!input_file_list;frontends] + end; + + Sys.set_signal Sys.sigusr1 (Sys.Signal_handle sighup_handle); - let felst = List.map (fun lst->let (x,y)=lst in printf "Slice %s (%s)\n" x y;flush logfd;new frontendHandler lst) !input_file_list in - let _ = new backendHandler !Globals.backend felst in - Fdwatcher.start_watch () + let felst = List.map + (fun lst->let (x,y)=lst in + logprint "Slice %s (%s)\n" x y; + new frontendHandler lst) + !input_file_list in + let _ = new backendHandler !Globals.backend felst in + Fdwatcher.start_watch () end