成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Systemd,把服務裝進 Linux 心臟里

系統 Linux
無論怎么搞,我們都希望跑在Linux上的某個進程,能夠隨著Linux的啟動自動啟動,隨著Linux的關閉自動關閉。我們希望自己的應用程序,就像是Linux的血肉一樣,就像是安裝在Linux的心臟里。

Linux非常的安全、可靠,而且有一股黑黝黝的妹子味道,這說明她也是柔軟的。

把服務跑在Linux上,就像男生把女裝藏在密碼箱里一樣讓人放心,它的穩定安全可以讓人安穩的睡個懶覺。

SPOF,是著名的單點問題。鑒于xjjdog非常討厭賣弄縮寫名詞的特點,我把它的全稱打在這里:single point of failure。

一臺Linux是孤單一臺Linux,所以跑在上面的服務,就會有單點問題。解決單點問題通常可以通過集群,也可以通過奢侈的影子節點來達到這個目的。

但無論怎么搞,我們都希望跑在Linux上的某個進程,能夠隨著Linux的啟動自動啟動,隨著Linux的關閉自動關閉。我們希望自己的應用程序,就像是Linux的血肉一樣,就像是安裝在Linux的心臟里。

準備程序

很長一段時間里,我使用supervisor來做這種事情。但可惜的是,supervisor并不是Linux的預裝軟件,而且它是python寫的,需要裝一大堆依賴包。在網絡權限逐漸收緊的企業環境中,使用supervisor會給自己徒添煩惱。

是的,并不是supervisor不好,只不過它太麻煩。頻繁的網絡權限申請讓人抓狂,甚至喧賓奪主。

退而求其次,那就是systemd。

圖片

為了說明怎么使用它,我們準備一段小小的Java程序:

import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;

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

把程序搞成服務

要想讓上面的程序成為系統的一部分,需要將其服務化:

[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

[Install]
WantedBy=multi-user.target

比較重要的就是ExecStart,它配置了你確切要執行的命令,我們這里當然是一個簡單的class文件。

給這個文件起一個名字吧,比如xjjdogfirstjava.service?,然后把文件扔進/etc/systemd/system/目錄里。

要啟動這個服務的話,直接執行下面的命令就好了:

systemctl start xjjdogfirstjava

如果你找不到剛剛創建的服務,記得reload一下:

systemctl daemon-reload

如果你想要它隨著Linux啟動的話,可以執行enable創建一個鏈接就可以了:

systemctl enable xjjdogfirstjava

除了這兩者,disable、stop、restart也是標配的指令。

注意到配置文件里有這么兩行內容:

Restart=always
RestartSec=1

它表明,每當程序異常終止的時候,都會自動重啟這個進程,重啟的間隔是1秒。

更多一些的配置

我們注意到,上面的配置文件里,有After=network.target字樣。它表明當MySQL啟動完畢的時候,才會啟動xjjdogfirstjava服務,也就是強行指定了一個依賴關系。

但很多小伙伴在使用上面配置的時候,經常發現服務自動重啟幾次之后,就再也不會再重啟了。

等等,我們不是使用了Restart=always參數么?

這是由于systemd默認內置了兩個閾值:

StartLimitBurst=5 
StartLimitIntervalSec=10

當你把StartLimitIntervalSec設置成0的時候,目的就總算達到了,我們的程序可以一直一失敗,一直重啟下去。

雖然這樣,保持一個重啟間隔是一個比較好的習慣。因為大多數服務重啟的時候,都會造成服務器資源的上升,如果你不想讓你的服務器報警,那就不要這么壓迫它。

End

這就是systemd,一個Linux內置的程序。有了它,你的應用程序終于能夠和Linux合為一體,天荒地老的伴隨下去了。

責任編輯:趙寧寧 來源: 小姐姐味道
相關推薦

2021-04-30 07:42:37

Windows10操作系統微軟

2014-02-19 17:44:26

SheepdogOpenStack

2022-05-27 10:59:22

LinuxSystemd

2024-01-29 13:23:46

Chrome人工智能模型

2009-09-03 08:49:13

2011-08-03 18:29:25

WindowsXP系統

2011-02-15 10:55:50

LinuxApacheMysql

2024-01-17 17:36:06

Linuxsystemd

2018-11-02 08:10:58

Linuxsystemd定時器

2020-04-29 16:25:36

WiFi人工智能技術

2020-10-11 20:54:39

Python開發Docker

2011-09-06 17:56:50

BuildingsAndroid應用建筑

2014-10-14 11:06:25

2025-05-09 08:25:00

數據庫Docker容器化

2011-09-15 15:48:38

iPhone應用Android應用在這兒IM

2021-08-17 10:53:11

Linuxsystemd-ude硬件

2019-05-20 09:54:40

Linuxsystemd自動備份

2021-06-04 06:20:47

systemd定位工具系統運維

2021-05-18 16:25:44

systemd啟動項系統運維

2014-04-16 14:32:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级毛片视频在线观看 | 欧美乱操| 日韩高清国产一区在线 | 成人在线免费观看视频 | 中文字幕在线一区 | 国产精品成人国产乱一区 | 免费在线观看一区二区 | 一二区视频 | 中文字幕国产视频 | 亚洲激情综合 | 91久久精品国产91久久性色tv | 欧美精品一区二区三区视频 | 91成人在线 | 一区中文字幕 | 天天做日日做 | 亚洲国产中文字幕 | 婷婷综合 | 国外激情av | 亚洲成av| 欧美精品一区二区三区在线 | 天天天天天天天干 | 九一视频在线播放 | 99精品欧美一区二区三区 | 亚洲顶级毛片 | 国产高清精品一区 | 亚洲一区二区久久 | 中国一级特黄真人毛片免费观看 | 国产午夜精品一区二区三区 | 99精品久久久久 | 国产精品久久久久无码av | 国产一区二区在线视频 | 久久久网 | 手机在线一区二区三区 | 精国产品一区二区三区四季综 | 男人天堂视频在线观看 | 欧美福利视频一区 | 欧美日韩视频一区二区 | 午夜影院| 欧美久久久网站 | 亚洲国产精品99久久久久久久久 | www.国产日本 |