Ubuntu 16.04: Nâng cấp không giám sát chạy vào các thời điểm ngẫu nhiên


13

Tôi đã cấu hình các nâng cấp không giám sát để cài đặt các gói bảo mật và thông báo qua thư khi thực hiện.

Tôi đã nhận thấy rằng việc cài đặt xảy ra vào những thời điểm rất ngẫu nhiên. Tôi biết rằng các phiên bản mới nhất đã thêm một độ trễ ngẫu nhiên tối đa 30 phút bắt đầu từ thời gian thực hiện cron.d Daily.

Tuy nhiên, sự chậm trễ tôi đang trải qua lớn hơn thế nhiều. Tôi thấy các bản nâng cấp không được giám sát thực hiện vào lúc 9 giờ sáng, 3 giờ chiều, 12 giờ sáng ... Các nhật ký hiển thị giống nhau, vì vậy đây không chỉ là việc gửi email mất nhiều thời gian hơn.

Nhiệm vụ nâng cấp không giám sát là nhiệm vụ đầu tiên trong cron.d Daily, có nghĩa là không có nhiệm vụ nào trước đó với thời gian thực hiện lớn.

Bất cứ ai cũng trải qua một điều tương tự?


Hành vi ngẫu nhiên là có chủ ý - để làm dịu nhu cầu thay vì hàng triệu hệ thống đập vào một vài tấm gương vào cùng một thời điểm mỗi ngày. Người dùng máy tính để bàn thông thường không nên chú ý đến hành vi. Một số người dùng doanh nghiệp muốn thay đổi hành vi thành một thứ dễ dự đoán hơn một chút và chắc chắn được hoan nghênh làm như vậy.
dùng535733

Vâng, lý do đằng sau sự lựa chọn này là rõ ràng. Chỉ là hành vi này là không thể chấp nhận cho các hệ thống sản xuất. Tại thời điểm tôi hỏi câu hỏi này, hành vi này (và cách khắc phục) không được ghi lại ở bất cứ đâu
daniel f.

Câu trả lời:


18

Sau khi gỡ lỗi này tôi tìm thấy giải pháp.

Nguyên nhân cốt lõi của vấn đề này nằm ở thực tế là trong Ubuntu 16.04 trở lên, các bản nâng cấp không giám sát sử dụng systemd - không phải cron - để lên lịch cập nhật với độ trễ ngẫu nhiên rất lớn:

/lib/systemd/system/apt-daily.timer được cấu hình với

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

Điều này có nghĩa là nó sẽ chạy hai lần một ngày, vào lúc 6:00 và 18:00, với độ trễ ngẫu nhiên lên tới 12 giờ. Vì điều này không phải lúc nào cũng được chấp nhận cho môi trường sản xuất, tôi đã phải ghi đè các cài đặt này.

Để giữ cho các tệp cấu hình gói không bị ảnh hưởng, tôi đã xác định ghi đè của mình trong /etc/systemd/system/apt-daily.timer.d/override.conf( Cập nhật : vui lòng đọc phần chỉnh sửa ở cuối câu trả lời này để biết thêm thông tin về tên tệp và vị trí, vì nó có vẻ hơi thay đổi).

Tôi đặt ở đó

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

để có các nâng cấp không giám sát chạy lúc 6:00 cộng với độ trễ ngẫu nhiên lên đến một giờ.

Sau đó, tôi chỉ cần khởi động lại bộ đếm thời gian với systemctl restart apt-daily.timer(cuối cùng cần tải lại daemon).

Không giám sát - các bản cập nhật hiện đang chạy ở thời điểm dự đoán một lần nữa!

Chỉnh sửa : Có vẻ như đối với Ubuntu 18.04, mọi thứ đã thay đổi một chút. Ghi đè nên được lưu trữ trong /etc/systemd/system/apt-daily-upgrade.timer.d/override.confvà trông như thế này:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuck đã đề cập đến cách tạo tệp ghi đè với tên và vị trí phù hợp trong một nhận xét bên dưới. Thay vì tự tạo một tệp, vui lòng xem xét việc chạysudo systemctl edit apt-daily.timer


Tại sao bạn xóa OnCalWiki trước?
jarno

1
Bởi vì nếu không, nó sẽ chỉ THÊM một bộ đếm thời gian mới vào lúc 6 giờ sáng, cũng để lại bộ hẹn giờ hiện tại. Vì tôi muốn nâng cấp không giám sát lên CHỈ chạy ở mức 6, tôi cần xóa lịch trình trước.
daniel f.

Tôi đã thêm "OnBootSec = 5min" để cho phép chạy sau khi khởi động, nhưng nó không hoạt động. (cũng đã thêm OnUnitActiveSec = 12h để nó không chạy quá thường xuyên.)
jarno

systemd, hay đúng hơn, tư duy systemd, lại đình công. Tôi có thể phải suy nghĩ lại về việc nâng cấp lên Xenial Xerus trong quá trình sản xuất sau khi viên ngọc này cắn tôi.
Joe

1
@daniel f. Tôi có tệp apt-Daily.timer trong / lib / systemd / system / cũng như một tệp trong /etc/systemd/system/timers.target.wants/ Tuy nhiên tôi không có bất kỳ trong / etc / systemd / system / chính nó như bạn Bạn có biết nếu tôi nên tạo thư mục apt-Daily.timer.d và thay vào đó là / lib / systemd / system không? Mọi lời khuyên đều biết ơn recd với thx.
Purvez

3

Tài liệu debian chính thức trên https://wiki.debian.org/UnattendsUpgrades hiện có một lỗi trong đó là gây hiểu lầm cho rất nhiều người. Nó tuyên bố rằng bạn có thể ghi đè thời gian nâng cấp bằng cách tạo một tệp có tên

/etc/systemd/system/apt-daily-upgrade.d/override.conf

Tuy nhiên, đường dẫn đúng là

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

1
Tìm kiếm tốt đẹp. IMHO điều an toàn nhất là sử dụng sudo systemctl edit apt-daily.timer. Điều này sẽ mở một trình soạn thảo với tệp thả xuống chính xác.
PerlDuck

2
Cảm ơn bạn PerlDuck, tôi đã chỉnh sửa trang Debian Wiki với đề xuất của bạn
Rolf Wojtech

Nâng cao câu trả lời này là hữu ích - và để cập nhật trang wiki Debian!
Anthony Geoghegan

3

Tôi đã thử giải pháp của Daniel nhưng bản nâng cấp vẫn chạy không đúng lúc. Hóa ra có hai phần ghi đè systemd cần thiết:

Được sử dụng để tải xuống

/lib/systemd/system/apt-daily.timer - ghi đè bằng /etc/systemd/system/apt-daily.timer.d/override.conf

Được sử dụng để nâng cấp

/lib/systemd/system/apt-daily-upTHER.timer - ghi đè bằng /etc/systemd/system/apt-daily-upTHER.timer.d/override.conf


1
Bạn đang dùng phiên bản nào? Vì vậy, bạn đã phải ghi đè cả hai bộ tính giờ được đề cập cùng một lúc?
daniel f.

Ubuntu 16.04.4 x64
Niels Rask
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.