Điểm:2

Nâng cấp dist có thay thế các tệp dịch vụ không?

lá cờ my

Gần đây tôi nhận thấy một máy chủ đang hoạt động apt-get update && apt-get dist-upgrade

Trong số những thứ khác, docker đã được cập nhật và khởi động lại.

Tuy nhiên, tôi nhận thấy một số thay đổi mà tôi đã thực hiện đối với tệp dịch vụ trước đây giờ đã biến mất. Các tập tin tại /lib/systemd/system/docker.service dường như đã được thiết lập lại.

Điều này có thể không? Tôi không nhớ nếu tôi chạy daemon-tải lại sau những thay đổi này.

CHỈNH SỬA: Để rõ ràng: Tôi tự hỏi là nâng cấp dist về cơ bản đã xóa tệp dịch vụ và thay thế bằng tệp mặc định?

Và làm daemon-tải lại ngăn chặn điều này trong tương lai?

EDIT2: Ok, có vẻ như Sudo systemctl chỉnh sửa docker.service là con đường để đi và thực hiện một daemon-tải lại trên lưu.

muru avatar
lá cờ us
Điều này có trả lời câu hỏi của bạn không? [Làm cách nào để ghi đè hoặc định cấu hình dịch vụ systemd?](https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services)
lá cờ my
@muru Không, câu hỏi của tôi là "có phải nâng cấp dist đã thay thế toàn bộ tệp dịch vụ bằng một tệp mới, bỏ qua tệp hiện có không?"
lá cờ my
@muru À, tôi đã đọc thêm một chút và có thông tin chi tiết về việc không chỉnh sửa các tệp /lib/systemd/. Vâng, đây sẽ là nó.
Điểm:9
lá cờ in

Không chỉnh sửa tệp trong /lib/systemd/ hoặc /usr/share/systemd vì chúng sẽ bị ghi đè khi cập nhật.

Thay vào đó, hãy sao chép tệp vào /etc/systemd/ và thực hiện các thay đổi ở đó.

Thư mục /etc/ (ít nhất là đối với systemd) được coi là nơi lưu trữ các tệp cấu hình cục bộ. Tất cả các thư mục /**/systemd/ khác được coi là nguồn của các tệp cấu hình mẫu và mặc định nên được thay thế trong bất kỳ bản nâng cấp nào.

Một lý do khác để không chỉnh sửa các tệp cấu hình được cung cấp bởi gói này là nếu bạn sao chép nó vào /etc/systemd/... và chỉnh sửa nó và mắc lỗi, bạn luôn có thể so sánh với tệp gốc.

systemctl daemon-tải lại không ngăn cản gì cả. Nó chỉ yêu cầu systemd kiểm tra lại tất cả cấu hình của nó và sử dụng bất cứ thứ gì đã thay đổi.

bac0n avatar
lá cờ cn
nghĩ rằng `/usr/local/lib/systemd/system/` tốt hơn `/etc/systemd...` [1](https://unix.stackexchange.com/questions/224992/where-do-i- put-my-systemd-unit-file)
lá cờ et
@bac0n vị trí được systemd chấp thuận là `/etc/systemd`. Đó là những gì `systemctl edit` sử dụng.
user10489 avatar
lá cờ in
Tôi cũng sẽ không chỉnh sửa cái đó trong/usr/local/lib/systemd, tôi cũng sẽ sao chép nó vào/etc/systemd trước khi chỉnh sửa.
bac0n avatar
lá cờ cn
@StephenKitt, những gì bạn [đề xuất](https://steveazz.xyz/micro/systemd-drop-in/) là một cái gì đó hoàn toàn khác và xứng đáng có câu trả lời của riêng nó và thậm chí là câu trả lời được ưa thích, tôi vẫn nghĩ, sao chép tệp vào `/etc/systemd/` không được khuyến nghị, ví dụ: bạn mất khả năng *che* đơn vị.
user10489 avatar
lá cờ in
@bac0n: Thực ra bạn nhầm rồi. Về cơ bản, bạn che giấu các đơn vị * bằng cách * đặt một tệp trống vào /etc/systemd/ bằng cách thay thế mặc định hệ thống bằng một tệp trống. Nếu bạn đang đặt một tệp thực (không trống) ở đó, bạn có thể tắt thiết bị thay vì che nó.
bac0n avatar
lá cờ cn
nhưng bạn đặt tập tin đã chỉnh sửa ở đâu?
user10489 avatar
lá cờ in
Tệp đã chỉnh sửa nằm trong /etc/systemd/system. Điều này che dấu mặc định bằng một tệp thay thế. Nếu bạn muốn tắt thiết bị tạm thời, bạn chỉ cần tắt nó, không cần phải che.
user10489 avatar
lá cờ in
Hãy để chúng tôi [tiếp tục cuộc thảo luận này trong cuộc trò chuyện](https://chat.stackexchange.com/rooms/126878/discussion-between-user10489-and-bac0n).
lá cờ et
@bac0n nó đã được đề cập trong [câu trả lời của muruâ tại đây](https://askubuntu.com/a/659268/412264), không cần phải sao chép nó IMO ;-).
Điểm:-1
lá cờ cn

Có vài nhược điểm lưu trữ tập tin thông thường Trong /etc/systemd/system, không phải vì bản thân systemd, mà vì hệ thống cư trú tại vị trí này. Việc đặt các tệp thông thường trong thư mục này sẽ phá vỡ một số chức năng của systemctl, trong trường hợp này là khả năng che dấu .service của bạn và không có lý do gì để tin rằng các ứng dụng khác sẽ xử lý vấn đề này theo cách khác. Bây giờ, systemd có một bộ được xác định trước đường dẫn tìm kiếm đơn vị, hầu hết đều quan tâm đến phân bổ, điều này làm cho các vị trí mà bạn có thể đặt .service về cơ bản bị giới hạn ở (hoặc ít nhất là cho đến khi vấn đề này được giải quyết):

/usr/local/lib/systemd/system

Điều này hoạt động đặc biệt tốt và không làm mất chức năng:

# cp -a hello-world.service /usr/local/lib/systemd/system
'hello-world.service' -> '/usr/local/lib/systemd/system/hello-world.service'

# systemctl daemon-tải lại
# dpkg -i hello-world_1.0-1_all.deb 
Chọn gói hello-world chưa được chọn trước đó.
(Đọc cơ sở dữ liệu ... 396452 ​​tệp và thư mục hiện được cài đặt.)
Chuẩn bị giải nén hello-world_1.0-1_all.deb ...
Giải nén hello-world (1.0) ...
Đang thiết lập hello-world (1.0) ...
Đã tạo liên kết tượng trưng /etc/systemd/system/multi-user.target.wants/hello-world.service â /usr/local/lib/systemd/system/hello-world.service.

# mặt nạ systemctl xin chào thế giới
Đã tạo liên kết tượng trưng /etc/systemd/system/hello-world.service â /dev/null.

trình tự thời gian tương tự cũng áp dụng cho các lượt đăng ký, trong đó /vân vân đảm nhận địa vị cao /chạy lần lượt được ưu tiên hơn /lib ... và cứ thế, các lượt đăng ký có tên khác nhau sẽ được áp dụng theo thứ tự từ điển bất kể vị trí. Nếu bạn có các lệnh chồng chéo, thì lệnh cuối cùng sẽ được ưu tiên:

: systemctl mèo xin chào thế giới
# /lib/systemd/system/hello-world.service
[Đơn vị]
Mô tả=Xin chào thế giới (lib).

[Dịch vụ]
Loại=oneshot
ExecStart=/opt/bin/hello.sh lib

[Cài đặt]
WantedBy=multi-user.target

# /usr/local/lib/systemd/system/hello-world.service.d/10-local.conf
[Đơn vị]
Mô tả=Xin chào thế giới (cục bộ).

[Dịch vụ]
ExecStart=
ExecStart=/opt/bin/hello.sh cục bộ

# /etc/systemd/system/hello-world.service.d/override.conf
[Dịch vụ]
ExecStart=
ExecStart=/opt/bin/hello.sh, v.v.

: systemctl bắt đầu hello-world
ngày 28 tháng 6 15:20:24 betazoid systemd[1]: Bắt đầu Hello world (cục bộ)....
ngày 28 tháng 6 15:20:24 betazoid xin chào[402381]: xin chào, v.v.
ngày 28 tháng 6 15:20:24 betazoid systemd[1]: hello-world.service: Succeeded.
ngày 28 tháng 6 15:20:24 betazoid systemd[1]: Đã hoàn thành Xin chào thế giới (cục bộ)..
user10489 avatar
lá cờ in
Theo http://0pointer.de/blog/projects/three-levels-of-off systemd hỗ trợ "ba cấp độ tắt": dịch vụ đã dừng, dịch vụ bị vô hiệu hóa, dịch vụ bị che khuất. Mặt nạ dành cho khi bạn *không bao giờ* muốn bắt đầu dịch vụ. Thật vô nghĩa khi có một tệp tùy chỉnh cho một dịch vụ mà bạn không bao giờ muốn bắt đầu. Giải pháp của bạn chỉ là cố gắng lấy bánh của nó và ăn luôn.
user10489 avatar
lá cờ in
Thư mục /usr/local/lib/systemd/system/ là mục tiêu để các chương trình cài đặt thủ công cài đặt dịch vụ của chúng. Mặc dù bản nâng cấp hệ thống thông thường sẽ không ghi đè lên điều này, nhưng việc chạy lại make install cho các chương trình có dịch vụ sẽ ghi đè lên điều đó. Thư mục chính xác cho các tệp dịch vụ tùy chỉnh để quản trị viên cài đặt là /etc/system/systemd
bac0n avatar
lá cờ cn
@ user10489 tạo một dịch vụ và đặt nó vào `/etc/systemd/system` và `systemctl mask` your.service điều gì sẽ xảy ra?
user10489 avatar
lá cờ in
Điều gì xảy ra nếu bạn nhập systemctl edit --full your.service ? Đây là những gì systemd dự định.
bac0n avatar
lá cờ cn
Vâng, điều này sẽ gây đau đầu tương tự, tôi có thể hiểu rằng tệp phải bắt đầu từ đâu đó, vì vậy tôi tha thứ cho họ lần này ;-)
user10489 avatar
lá cờ in
Nó chỉ làm bạn đau đầu, đây là giải pháp tiêu chuẩn và được mong đợi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.