Điểm:2

Hẹn giờ không bắt đầu bằng lệnh userdata sau khi khởi động lại

lá cờ co

Mô tả vấn đề:

Khi khởi động, chúng tôi kích hoạt tập lệnh khởi tạo dịch vụ được hiển thị bên dưới. Kịch bản là một phần của Instance Dữ liệu người dùng.

Tập lệnh này sao chép những thứ dịch vụ/bộ đếm thời gian cần thiết sang hệ thống thư mục và bắt đầu hẹn giờ.

Thỉnh thoảng sau khi khởi động lại, bộ hẹn giờ của chúng tôi không hoạt động và ở trạng thái không áp dụng.

Các Sudo systemctl khởi động lại cleanup.timer lệnh không giúp được gì.

chỉ sudo systemctl dừng dọn dẹp.timer và sau đó Sudo systemctl start cleanup.timer làm.

Chúng tôi gặp vấn đề này không chỉ với một bộ đếm thời gian cụ thể. Chúng tôi có rất nhiều bộ hẹn giờ với cấu trúc và dịch vụ khởi tạo gần như giống nhau. Tất cả các bộ hẹn giờ được tải nhưng một số trong số chúng có thể ở trong hoạt động (đã qua) trạng thái và không hoạt động.

Thiết lập của chúng tôi:

Chúng ta chạy Ubuntu 18.04 LTS.

Chúng tôi có tập lệnh khởi tạo dịch vụ này:

sudo cp <BASIC PATH>/services/cleanup.service /etc/systemd/system/cleanup.service
sudo cp <BASIC PATH>/services/cleanup.timer /etc/systemd/system/cleanup.timer
Sudo systemctl daemon-tải lại
Sudo systemctl start cleanup.timer

Và điều này dọn dẹp.service:

[Đơn vị]
Mô tả=Dịch vụ dọn dẹp mọi thứ
Yêu cầu = docker.service
Sau = docker.service

[Dịch vụ]
ExecStart=<<SHELL COMMAND>>

Và điều này dọn dẹp.timer:

[Đơn vị]
Mô tả=Hẹn giờ cho dịch vụ dọn dẹp mọi thứ

[Hẹn giờ]
OnBootSec=1 phút
OnUnitActiveSec=1800 giây
Độ chính xácSec=5sec

[Cài đặt]
WantedBy=timers.target

Bây giờ hãy kiểm tra các lệnh này:

> Sudo systemctl list-timers
TIẾP THEO TRÁI ĐƠN VỊ VƯỢT QUA CUỐI CÙNG KÍCH HOẠT
n/a n/a n/a n/a cleanup.timer cleanup.service
> Sudo systemctl status cleanup.timer
â cleanup.timer - Hẹn giờ cho dịch vụ dọn dẹp mọi thứ
   Đã tải: đã tải (/etc/systemd/system/cleanup.timer; đã tắt; giá trị đặt trước của nhà cung cấp: đã bật)
   Hoạt động: hoạt động (đã qua) kể từ Thứ Tư 2021-11-17 21:07:22 UTC; 11 giờ trước
  Kích hoạt: n/a

Ngày 17 tháng 11 21:07:22 ip-XX-XX-XX-XX systemd[1]: Đã bắt đầu Hẹn giờ cho dịch vụ dọn dẹp mọi thứ.

Câu hỏi:

Điều gì có thể là lý do của tình trạng này và làm thế nào để tránh nó?

Điểm:1
lá cờ jp

Tôi có vẻ như bạn đã quên cho phép bộ hẹn giờ.

bắt đầu systemctl <đơn vị> khởi động bộ hẹn giờ đó ngay bây giờ (tức là khi bạn cài đặt nó lần đầu tiên và muốn nó chạy).

kích hoạt systemctl <đơn vị> không khởi động thiết bị ngay bây giờ nhưng thiết lập các móc có liên quan để thiết bị được khởi động dựa trên những gì có trong tệp đơn vị...

ví dụ. hẹn giờ sẽ bắt đầu sau khi khởi động lại vì...

[Cài đặt]
WantedBy=timers.target

chạy tập lệnh khởi tạo dịch vụ trên mỗi lần khởi động?

Khi khởi động, chúng tôi kích hoạt tập lệnh khởi tạo dịch vụ... Chúng tôi có tập lệnh khởi tạo dịch vụ này:

Điều đó rõ ràng là không chạy thành công vì tập lệnh init được cho là đang chạy systemctl bắt đầu dọn dẹp.timer nhưng cleanup.timer không chạy hoặc bị lỗi sau 11 giờ.

Vì vậy, tôi sẽ xem nhật ký xung quanh tập lệnh init của bạn để xem lỗi gì và tại sao. Có thể tập lệnh init của bạn đang chạy trước khi docker khả dụng hoặc đại loại như thế.

lá cờ co
Như tôi đã hiểu các tài liệu, lợi ích chính của `enable` là khả năng khởi động lại lâu dài nên dịch vụ sẽ được hệ thống tự động khởi động. Nhưng vì các tập lệnh `Dữ liệu người dùng` thực hiện `bắt đầu` ở mỗi lần khởi động nên tôi thấy không có lý do gì để thực hiện `bật`. Dù sao cũng cảm ơn, sẽ kiểm tra và thử nghiệm điều này. Giới thiệu về `tập lệnh khởi tạo dịch vụ trên mỗi lần khởi động`. Mỗi trong số chúng chứa `set -e` ở đầu tập lệnh. Vì vậy, nó sẽ thất bại nếu bất kỳ lệnh tiếp theo nào thoát ra với trạng thái khác không, nhưng điều này đã không xảy ra.
lá cờ co
Giới thiệu về `Có thể tập lệnh init của bạn đang chạy trước khi docker khả dụng hoặc đại loại như vậy.`.Thật kỳ lạ vì tất cả các dịch vụ systemctl của tôi đều chứa các tùy chọn `Yêu cầu=` và `Sau=` và điều này sẽ buộc các dịch vụ phải đợi cho đến khi có sẵn các dịch vụ cần thiết. Ngoài ra, có những tình huống trong cùng một thời điểm, một phần dịch vụ có cùng tùy chọn hoạt động tốt và một phần khác thì không.
mattpr avatar
lá cờ jp
Tôi chỉ có thể nhận xét về những gì rõ ràng từ những gì bạn đã đăng. Tập lệnh init của bạn yêu cầu bắt đầu hẹn giờ, nhưng `journalctl -u ` cho thấy nó đã không chạy trong 11 giờ. Vì vậy, hoặc `systemctl`/`journalctl` sai (không có khả năng) hoặc tập lệnh init của bạn không thực sự bắt đầu hẹn giờ vì một số lý do (nhiều khả năng hơn). Vì vậy, tôi sẽ bổ sung thêm gỡ lỗi/ghi nhật ký vào tập lệnh init của bạn và xem xét điều đó qua một loạt lần khởi động lại. Nếu bạn có thể đăng nhiều hơn tôi có thể giúp nhiều hơn.
Điểm:0
lá cờ ru

Tôi vẫn chưa quen thuộc với systemd nhưng theo như tôi biết thì môi trường PATH vẫn chưa khả dụng khi khởi động, do đó, một số tập lệnh và chương trình đặt môi trường PATH trước tiên. Giả sử dịch vụ của bạn chạy bất cứ khi nào bạn chạy nó trên bảng điều khiển, điều này sẽ luôn xảy ra.

Đă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.