Sửa đổi tệp đơn vị systemd mà không thay đổi tệp đơn vị ngược dòng


24

Tôi đã cài đặt pimddịch vụ bằng phương tiện apt. Điều này đi kèm với một systemdtập tin đơn vị ngược dòng ( /lib/systemd/system/pimd.service).

Tôi muốn dịch vụ được khởi động lại khi vì lý do nào đó nó bị giết, do đó tôi muốn thêm dòng Restart = alwaystrong tệp đơn vị.

Tuy nhiên, tôi không muốn sửa đổi tệp đơn vị ngược dòng.

Có cách giải quyết nào cho việc này không?



Bạn đã thử gì?
030

Câu trả lời:


34

Bạn có hai lựa chọn:

  • Sao chép tập tin đơn vị từ /lib/systemd/system/đến /etc/systemd/system/.
    Và sau đó thực hiện các sửa đổi của bạn /etc/systemd/system/pimd.serviceđể ghi đè hoàn toàn (các) tệp đơn vị được cung cấp bởi nhà bảo trì gói.

    Lệnh systemctl edit --full <service-name>tự động hóa điều này cho bạn.

  • Bạn có thể thay đổi hoặc thêm cài đặt cấu hình cụ thể cho một đơn vị mà không phải sửa đổi tệp đơn vị bằng cách tạo .conftệp trong thư mục thả vào, /etc/systemd/system/<unit-name>.<unit-type>.d/
    tức là tạo/etc/systemd/system/pimd.service.d/restart.conf

    Lệnh systemctl edit <service-name>thực hiện các bước này cho bạn.

Xem man systemd.unit


10
Tùy chọn thứ hai có thể được thực hiện dễ dàng hơn bằng cách sử dụngsystemctl edit <service-name>
muru

7
Và cái đầu tiên bằng cách sử dụng systemctl edit --full <service-name>.
grawity

22

Tài liệu của RHEL khuyến nghị hai cách:

  1. Mở rộng tệp đơn vị mặc định bằng cách tạo thư mục cấu hình và tệp trong /etc/systemd/system/[name-goes-here].service.d/config_name.conf

Trong trường hợp này, tập tin sẽ cần phải chứa một cái gì đó như thế này:

[Service]
Restart=always

Đây là những gì systemctl edit [name-goes-here]nó làm, nó tạo ra thư mục đó và override.confbên trong nó.

  1. Tạo một bản sao của tập tin đơn vị gốc /usr/lib/systemd/system//etc/systemd/system/và thực hiện thay đổi đó.

Tôi sẽ thử tùy chọn một nhưng cả hai đều là lựa chọn khả thi. Hoặc là nhớ chạy systemctl daemon-reloadsau khi thực hiện các thay đổi.

Tài liệu của RHEL về Tạo và Sửa đổi Tệp Đơn vị systemd


0

Cân nhắc sử dụng tập lệnh để đọc cấu hình ngược dòng, sửa đổi nó và nhổ nó ra tập tin thả vào.

Ví dụ: tôi sử dụng Chef và đây là một mảnh ruby ​​(thư viện) phân tích tệp đơn vị marathon systemd để lấy ExecStart gốc từ nó

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

Sau đó, trong công thức, tôi tạo tệp thả xuống để chắp thêm tùy chọn vào 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.