借助Systemd,把服务装进 Linux 心脏里
发布时间:2022-07-30 16:14:56 所属栏目:系统 来源:互联网
导读:Linux非常的安全、可靠,而且有一股黑黝黝的妹子味道,这说明她也是柔软的。 一台Linux是孤单一台Linux,所以跑在上面的服务,就会有单点问题。解决单点问题通常可以通过集群,也可以通过奢侈的影子节点来达到这个目的。 但无论怎么搞,我们都希望跑在Linux
Linux非常的安全、可靠,而且有一股黑黝黝的妹子味道,这说明她也是柔软的。 一台Linux是孤单一台Linux,所以跑在上面的服务,就会有单点问题。解决单点问题通常可以通过集群,也可以通过奢侈的影子节点来达到这个目的。 但无论怎么搞,我们都希望跑在Linux上的某个进程,能够随着Linux的启动自动启动,随着Linux的关闭自动关闭。我们希望自己的应用程序,就像是Linux的血肉一样,就像是安装在Linux的心脏里。 import java.io.OutputStream; import java.net.InetSocketAddress; public class Runner { public static void main(String[] args) throws Exception{ HttpServer server = HttpServer.create(new InetSocketAddress(14000), 0); HttpContext context = server.createContext("/"); context.setHandler(exchange -> { try { String response = "Ojbk!"; exchange.sendResponseHeaders(200, response.getBytes().length); OutputStream os = exchange.getResponseBody(); os.write(response.getBytes()); os.close(); } catch (Exception ex) { ex.printStackTrace(); } }); server.start(); } } 这段代码将在14000端口开启一个Http服务器,每当你访问它的时候,它都会输出Ojbk!。 复制 curl http://localhost:14000 1. 把程序搞成服务 要想让上面的程序成为系统的一部分,需要将其服务化: 复制 [Unit] Description=My First Java Service After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root ExecStart=/usr/bin/env java /opt/Runner 比较重要的就是ExecStart,它配置了你确切要执行的命令,我们这里当然是一个简单的class文件。 给这个文件起一个名字吧,比如xjjdogfirstjava.service,然后把文件扔进/etc/systemd/system/目录里。 要启动这个服务的话,直接执行下面的命令就好了: 复制 systemctl start xjjdogfirstjava 1. 如果你找不到刚刚创建的服务,记得reload一下: 复制 systemctl daemon-reload 1. 如果你想要它随着Linux启动的话,可以执行enable创建一个链接就可以了: 复制 systemctl enable xjjdogfirstjava 1. 除了这两者,disable、stop、restart也是标配的指令。 注意到配置文件里有这么两行内容: 复制 Restart=always RestartSec=1 1. 2. 它表明,每当程序异常终止的时候,都会自动重启这个进程,重启的间隔是1秒。 这是由于systemd默认内置了两个阈值: 复制 StartLimitBurst=5 StartLimitIntervalSec=10 1. 2. 当你把StartLimitIntervalSec设置成0的时候,目的就总算达到了,我们的程序可以一直一失败,一直重启下去。 虽然这样,保持一个重启间隔是一个比较好的习惯。因为大多数服务重启的时候,都会造成服务器资源的上升,如果你不想让你的服务器报警,那就不要这么压迫它。 End 这就是systemd,一个Linux内置的程序。有了它,你的应用程序终于能够和Linux合为一体,天荒地老的伴随下去了。 ![]() (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |