//#! /usr/bin/java --source 17 @/etc/freed/init/jvm.args import java.lang.management.ManagementFactory; import java.util.TreeMap; import org.argeo.init.Service; import jdk.jshell.tool.JavaShellToolBuilder; import sun.misc.Signal; class FreedInit { public static void main(String... args) { final long pid = ProcessHandle.current().pid(); System.out.println("FREEd Init daemon starting with pid " + pid + "..."); // System.out.println(System.getProperty("user.dir")); // System.out.println(System.getProperty("user.name")); // System.out.println(System.getProperty("user.home")); // System.setProperty("user.dir", "/tmp"); for (Object key : new TreeMap<>(System.getProperties()).keySet()) { System.out.println(key + "=" + System.getProperty(key.toString())); } System.out.flush(); Signal.handle(new Signal("TERM"), (signal) -> { System.out.println("SIGTERM caught"); System.exit(0); }); Signal.handle(new Signal("INT"), (signal) -> { System.out.println("SIGINT caught"); System.exit(0); }); Signal.handle(new Signal("HUP"), (signal) -> { System.out.println("SIGHUP caught"); System.exit(0); }); if (args.length > 0 && ("1".equals(args[0]) // || "single".equals(args[0]) // || "emergency".equals(args[0]))) { // TODO check if we can remove dependency to management String classpath = ManagementFactory.getRuntimeMXBean().getClassPath(); String feedbackMode = "concise"; // TODO --startup script JavaShellToolBuilder builder = JavaShellToolBuilder.builder(); try { builder.start("--execution", "direct", "--class-path", classpath, "--feedback", feedbackMode); } catch (Exception e) { e.printStackTrace(); System.err.flush(); System.exit(1); return; } } else { Service.main(args); } } }