Di chuyển tập lệnh khởi động cơ bản sang systemd


17

Tôi vừa nâng cấp một máy chủ từ Ubuntu 14.10 lên 15.04 và một vài dịch vụ mà tôi bắt đầu thông qua các tập lệnh khởi động tùy chỉnh không còn chạy nữa.

Hiểu biết của tôi là tôi cần phải viết lại chúng dưới dạng systemddịch vụ, nhưng suy nghĩ về việc học toàn bộ systemdhệ thống qua đêm là một chút khó khăn.

Kịch bản mới nhất chỉ khởi chạy autosshkhi khởi động và tôi có một vài tập lệnh tương tự khác khởi chạy các quy trình dài.

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

Làm thế nào tôi có thể viết lại điều này như một systemddịch vụ?


3
Systemd cho người dùng Upstart là một điểm khởi đầu tốt.
muru

Câu trả lời:


13

quy tắc đầu tiên để di chuyển đến systemd

Tại thời điểm này, năm 2015, rất có thể ai đó đã thực hiện nó.

systemd đã được khoảng một vài năm. Và đã có cả một ngành công nghiệp nhà tranh của những người viết các tập tin đơn vị và xuất bản chúng. GitHub, đặc biệt, dường như thu hút kho lưu trữ của các bộ sưu tập của các đơn vị dịch vụ.

Thật vậy, chỉ cần tìm WWW cho autossh.service(như một cụm từ) sẽ xuất hiện:

một đơn vị mẫu

Điều đó nói rằng, như tôi đã chỉ ra ở một số nơi trên StackExchange, kiểu di chuyển này không phải là một quá trình cơ học, và đôi khi chỉ dịch một cách robot từ bất cứ thứ gì có vào một tệp đơn vị đang làm sai, hoặc ít nhất là kém. Trong trường hợp này, việc autosshtích cực thở hổn hển được xử lý với một đơn vị mẫu , nó được khởi tạo thành các đơn vị dịch vụ thực tế, được tham số hóa bằng tên đích. Vì vậy /etc/systemd/system/autossh@.service, có:

[Đơn vị]
Mô tả = Dịch vụ AutoSSH cho đường hầm ngược từ% i 
Sau = mạng.target

[Dịch vụ]
Người dùng = tự động
Môi trườngFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Tải về]
WantedBy = multi-user.target

Tạo một tệp có tên /etc/autossh/other_server.example.conf, tối thiểu:

SSH_USER = joe

Tất cả các điều khiển thông thường sau đó áp dụng:

  • systemctl enable autossh@other_server.example - Cho phép một cá thể được tự động bắt đầu tại bootstrap.
  • systemctl start autossh@other_server.example - Bắt đầu bằng tay ngay lập tức.
  • systemctl status autossh@other_server.example - Xem trạng thái của nó.

Và vâng, quy tắc đầu tiên thậm chí áp dụng cho điều này. Tìm kiếm, người ta có thể thấy rằng tôi đã bị đánh bại bởi điều này, chỉ dưới một hai tuần, bởi Greg Freemyer tại OpenSUSE.


Cảm ơn bạn - Tôi đã nghĩ ra một cái gì đó tương tự như vậy, nhưng tôi không biết về ý tưởng của 'đơn vị mẫu'
trvrm

@JdeBP Tôi cũng có câu hỏi tương tự ở đây . Muốn xem nếu bạn có thể giúp tôi ra.
dùng1950349
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.