Ubah file unit systemd tanpa mengubah file unit upstream

24

Saya telah menginstal pimdlayanan melalui apt. Ini dilengkapi dengan systemdfile unit hulu ( /lib/systemd/system/pimd.service).

Saya ingin agar layanan di-restart ketika karena beberapa alasan terbunuh, maka saya ingin menambahkan baris Restart = alwaysdalam file unit.

Namun, saya tidak ingin memodifikasi file unit hulu.

Apakah ada solusi untuk ini?

giomanda
sumber

Jawaban:

35

Anda memiliki dua opsi:

  • Salin file unit dari /lib/systemd/system/ke /etc/systemd/system/.
    Dan kemudian buat modifikasi Anda /etc/systemd/system/pimd.serviceuntuk sepenuhnya menimpa file unit yang disediakan oleh pengelola paket.

    Perintah systemctl edit --full <service-name>mengotomatiskan ini untuk Anda.

  • Anda dapat mengubah atau menambahkan pengaturan konfigurasi khusus untuk suatu unit, tanpa harus memodifikasi file unit dengan membuat .conffile dalam direktori drop-in /etc/systemd/system/<unit-name>.<unit-type>.d/
    yaitu membuat/etc/systemd/system/pimd.service.d/restart.conf

    Perintah systemctl edit <service-name>melakukan langkah-langkah ini untuk Anda.

Lihat man systemd.unit

HBruijn
sumber
10
Opsi kedua dapat dibuat lebih mudah dengan menggunakansystemctl edit <service-name>
muru
7
Dan yang pertama dengan menggunakan systemctl edit --full <service-name>.
grawity
22

Dokumentasi RHEL merekomendasikan dua cara:

  1. Perpanjang file unit default dengan membuat direktori konfigurasi dan file di bawah /etc/systemd/system/[name-goes-here].service.d/config_name.conf

Dalam hal ini file tersebut harus mengandung sesuatu seperti ini:

[Service]
Restart=always

Inilah yang systemctl edit [name-goes-here]dilakukannya, ia menciptakan direktori itu dan override.confdi dalamnya.

  1. Membuat copy dari file unit asli /usr/lib/systemd/system/di /etc/systemd/system/dan make perubahan di sana.

Saya akan mencoba opsi satu tetapi keduanya opsi yang layak. Either way ingat untuk menjalankan systemctl daemon-reloadsetelah melakukan perubahan.

Dokumentasi RHEL tentang Membuat dan Memodifikasi sistem dan File Unit

Henrik Pingel Reinstate Monica
sumber
0

Pertimbangkan untuk menggunakan skrip untuk membaca konfigurasi hulu, memodifikasinya, dan meludahkannya ke file drop-in.

Sebagai contoh, saya menggunakan Chef dan inilah sepotong ruby ​​(perpustakaan) yang mem-parsing file systemd marathon unit untuk mendapatkan ExecStart asli darinya

require 'inifile'

module Dcos
  def get_execstart_from_unit_file
    marathon_systemd_unit_file = 
IniFile.load('/etc/systemd/system/dcos-marathon.service')
    return marathon_systemd_unit_file['Service']['ExecStart']
  end
end

Kemudian dalam resep, saya membuat file drop-in untuk menambahkan opsi ke ExecStart

chef_gem 'inifile'

exec_start_orig = get_execstart_from_unit_file

systemd_service_drop_in 'dcos-marathon' do
  override 'dcos-marathon.service'
  precursor 'Service' => { 'ExecStart' => nil }
  service do
    exec_start exec_start_orig + ' --env_vars_prefix "DCOS_MARATHON_"'
  end
end
riemann
sumber