在halt,systemd和Commons Daemon

时间:2017-09-27 17:29:55

标签: java linux daemon systemd apache-commons-daemon

请注意: Commons守护程序自 2013 以来尚未发布。所以,如果有一个更现代的替代方案(那与systemd更加兼容),那么我会全神贯注并接受任何想法!

我正在尝试将我的Java 8应用程序部署并作为由systemd管理的真正Linux服务运行。我已经阅读了Commons Daemon文档,我相信完成此任务的方法如下:

  1. 写一个systemd服务单位文件,比如一个/lib/systemd/system/myapp.service文件;这将允许我通过systemctl start myapp等手动控制我的应用程序,并且还允许我执行以下操作:配置我的应用程序以在Linux启动时启动,如果崩溃则始终尝试重新启动等等。
  2. 然后我还需要实现Daemon接口(来自Commons Daemon),这将允许我的应用程序“监听”从systemd发送给它的事件,并在确定时调用正确的Java方法事情发生了(应用程序启动,停止,重启,Linux关闭等)。
  3. 我最好尝试这样一个Daemon impl:

    public class MyApp implements Daemon {
        private BillingService billingService;
        private PizzaDeliveryService pizzaDeliveryService;
    
        public MyApp() {
            super();
    
            // Do NOT initialize any services from inside here.
        }
    
        public static void main(String[] args) {
            MyApp app = new MyApp();
        }
    
        @Override
        public void init(DaemonContext context) throws DaemonInitException, Exception {
            // 1. I assume this is where I do all my initializing,
            // and that I don't init anything in my default ctor above?
            billingService = new StripBillingService();
            pizzaDeliveryService = new LittleCaesarsDeliveryService();
            // etc.
        }
    
        @Override
        public void start() throws Exception {
            // 2. This is where my service starts actually doing things,
            // firing up other threads, etc.
        }
    
        @Override
        public void stop() throws Exception {
            // 3. Will this respond to a Linux 'sudo shutdown -P now'
            // command?
        }
    
        @Override
        public void destroy() {
            // 4. Where I'm supposed to actually release resources
            // and terminate gracefully.
        }
    }
    

    我对Daemon界面的理解是否正确?简单地在MyApp内实例化main实例是否正确,然后Commons Daemon负责为我调用init(...)start(...)?我是否正确初始化任何MyApp字段或从默认构造函数执行依赖注入,而而不是init(...)内部执行所有操作?< / p>

    更重要的是(我的实际问题):哪些Linux命令会触发stop(...)方法?

    我问,因为我打算通过发出sudo shutdown -P nowsudo halt -p来关闭服务器,并且想知道哪个(如果有的话)命令会提示systemd调用{{1} }} 方法。 有什么想法吗?

0 个答案:

没有答案