加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 系统 > 正文

借助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合为一体,天荒地老的伴随下去了。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读