如何為 systemd 實例化服務的不同實例指定不同的資源限制?

如何為 systemd 實例化服務的不同實例指定不同的資源限制?

由於高於我的工資等級的原因,我需要在具有裸機作業系統的實體主機上運行資料庫伺服器的多個實例。我還需要限制每個實例的物理記憶體使用。

我正在使用模板單元檔案來啟動數十個實例。我用來EnvironmentFile為每個實例指定不同的環境變數和命令列參數。

但是,我還希望能夠為每個實例指定不同的記憶體限制。 AFAICT,環境變數替換不適用於資源限制選項,例如MemoryHigh.

我認為嵌入式文件將是答案,但我找不到將嵌入式文件與實例化服務一起使用的單一範例。有什麼方法可以為 ,創建一個插入文件myservice@1,為 ,創建一個不同的插入文件myservice@2,等等?

$ cat /etc/systemd/system/[email protected]

[Unit]
Description=Something
After=syslog.target network.target

[Service]
Type=forking    
EnvironmentFile=/etc/myservice/myservice.%i.env
ExecStart=/usr/bin/myservice $OPTIONS_FROM_ENV
MemoryHigh=4G

[Install]
WantedBy=multi-user.target

答案1

我想我在這個答案中找到了我想要的東西:https://serverfault.com/a/879705/62991

只需使用實例名稱建立插入目錄,您就可以覆寫那裡的設置,就像對非實例化服務所做的那樣。

在下面的範例中, 的實例myservice預設具有 4GiB 記憶體限制,但myservice@1myservice@2自己的設定。在 Fedora 25 上與 systemd 231 配合良好。

$ cat /etc/systemd/system/[email protected]
[Unit]
Description=Something
After=syslog.target network.target

[Service]
Type=forking    
EnvironmentFile=/etc/myservice/myservice.%i.env
ExecStart=/usr/bin/myservice $OPTIONS_FROM_ENV
MemoryHigh=4G

[Install]
WantedBy=multi-user.target

$ cat /etc/systemd/system/[email protected]/99-memory.conf
[Service]
MemoryHigh=10G

$ cat /etc/systemd/system/[email protected]/99-memory.conf
[Service]
MemoryHigh=20G

相關內容