Có cách nào để biết khi nào một bộ định thời systemd sẽ chạy tiếp theo không?


19

Tôi đang thử nghiệm bộ đếm thời gian systemd và cố gắng ghi đè thời gian chờ mặc định của nó, nhưng không thành công. Tôi đang tự hỏi liệu có cách nào để yêu cầu systemd cho chúng tôi biết khi nào dịch vụ sẽ được chạy tiếp theo không.

Tệp bình thường ( /lib/systemd/system/snapbackend.timer):

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.timer.html

[Unit]
Description=Run the snapbackend service once every 5 minutes.

[Timer]
# You must have an OnBootSec (or OnStartupSec) otherwise it does not auto-start
OnBootSec=5min
OnUnitActiveSec=5min
# The default accuracy is 1 minute. I'm not too sure that either way
# will affect us. I am thinking that since our computers will be
# permanently running, it probably won't be that inaccurate anyway.
# See also:
# http://stackoverflow.com/questions/39176514/is-it-correct-that-systemd-timer-accuracysec-parameter-make-the-ticks-slip
#AccuracySec=1

[Install]
WantedBy=timers.target

# vim: syntax=dosini

Tệp ghi đè ( /etc/systemd/system/snapbackend.timer.d/override.conf):

# This file was auto-generated by snapmanager.cgi
# Feel free to do additional modifications here as
# snapmanager.cgi will be aware of them as expected.
[Timer]
OnUnitActiveSec=30min

Tôi đã chạy các lệnh sau và bộ đếm thời gian vẫn tích tắc cứ sau 5 phút. Có thể có một lỗi trong systemd?

sudo systemctl stop snapbackend.timer
sudo systemctl daemon-reload
sudo systemctl start snapbackend.timer

Vì vậy, tôi cũng đã tự hỏi, làm thế nào tôi có thể biết khi nào bộ đếm thời gian sẽ đánh dấu tiếp theo? Bởi vì điều đó sẽ ngay lập tức cho tôi biết liệu nó trong 5 phút. hoặc 30 phút. nhưng từ systemctl status snapbackend.timerkhông nói gì về điều đó. Chỉ cần tự hỏi liệu có một lệnh sẽ cho tôi biết độ trễ hiện đang được sử dụng.

Đối với những người quan tâm, cũng có tệp dịch vụ ( /lib/systemd/system/snapbackend.service), mặc dù tôi sẽ tưởng tượng rằng điều này sẽ không có tác dụng gì đối với đồng hồ bấm giờ ...

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html

[Unit]
Description=Snap! Websites snapbackend CRON daemon
After=snapbase.service snapcommunicator.service snapfirewall.service snaplock.service snapdbproxy.service

[Service]
# See also the snapbackend.timer file
Type=simple
WorkingDirectory=~
ProtectHome=true
NoNewPrivileges=true
ExecStart=/usr/bin/snapbackend
ExecStop=/usr/bin/snapstop --timeout 300 $MAINPID
User=snapwebsites
Group=snapwebsites
# No auto-restart, we use the timer to start once in a while
# We also want to make systemd think that exit(1) is fine
SuccessExitStatus=1
Nice=5
LimitNPROC=1000
# For developers and administrators to get console output
#StandardOutput=tty
#StandardError=tty
#TTYPath=/dev/console
# Enter a size to get a core dump in case of a crash
#LimitCORE=10G

[Install]
WantedBy=multi-user.target

# vim: syntax=dosini

1
Có đầu ra của systemctl list-timerssự giúp đỡ?
phg

Ah! Tìm kiếm trên đó, tôi tìm thấy trang này với giải pháp: bbs.archlinux.org/viewtopic.php?id=214989 Tôi sẽ viết câu trả lời ngay bây giờ.
Alexis Wilke

Câu trả lời:


25

Trạng thái của bộ định thời hiện đang hoạt động có thể được hiển thị bằng cách sử dụng systemctl list-timers:

$ systemctl list-timers --all
NEXT                         LEFT     LAST                         PASSED       UNIT                         ACTIVATES
Wed 2016-12-14 08:06:15 CET  21h left Tue 2016-12-13 08:06:15 CET  2h 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service

1 timers listed.

7

Từ @phg bình luận và trả lời, tôi tìm thấy một trang với câu trả lời. Bộ hẹn giờ được tích lũy và bạn cần đặt lại chúng trước nếu không mục nhập trước đó vẫn ở xung quanh. Điều này hữu ích cho lịch, nhưng nó hoạt động tương tự với tất cả các bộ tính giờ.

Có một mục nhập đặt lại bộ hẹn giờ trước khi thay đổi thành giá trị mới hoạt động như mong đợi:

# This file was auto-generated by snapmanager.cgi
# Feel free to do additional modifications here as
# snapmanager.cgi will be aware of them as expected.
[Timer]
OnUnitActiveSec=
OnUnitActiveSec=30min

1

Không, không có cách nào để xem chính xác thời điểm hẹn giờ sẽ chạy tiếp theo. systemdcung cấp systemctl list-timerssystemctl status something.timer, nhưng những điều đó không cho thấy ảnh hưởng của AccuracySec=và có thể các chỉ thị khác làm thay đổi thời gian.

Nếu bạn đặt AccuracySec=1htrên hai máy chủ, cả hai sẽ báo cáo rằng cùng một bộ đếm thời gian trên cả hai máy chủ sẽ chạy cùng một lúc, nhưng thực tế chúng có thể bắt đầu cách nhau một giờ! Nếu bạn muốn biết liệu hai bộ định thời ngẫu nhiên có thể va chạm hay không, dường như không có cách nào để kiểm tra thời gian chạy tính toán cuối cùng để tìm hiểu.

Có một vấn đề systemd mở để làm cho đầu ra của bộ định thời danh sách chính xác hơn / ít gây nhầm lẫn hơn.


Điểm thú vị về bộ tính giờ. Tuy nhiên, thông tin chúng tôi nhận được list-timerslà khá tốt để hiểu liệu việc sử dụng bộ hẹn giờ của bạn có chính xác hay không.
Alexis Wilke

1
Không phải trong trường hợp của tôi. Tôi muốn sử dụng cùng một cấu hình trên các máy chủ sinh đôi, nhưng sử dụng AccuracySec = để đảm bảo rằng cả hai không thực hiện bảo trì cùng một lúc. Tôi muốn biết khi nào bộ hẹn giờ sẽ thực sự bắn vào từng máy chủ, nhưng không thể.
Mark Stosberg

Ah. Tôi có vấn đề tương tự. Tôi sẽ sử dụng một chủ được chọn (sử dụng hệ thống bỏ phiếu) và chủ sẽ gửi thông báo "thực hiện bảo trì" cho máy tính 1, sau khi máy tính 1 hoàn tất, nó sẽ báo cáo trạng thái mới cho chủ đó để yêu cầu máy tính 2 thực hiện bảo trì, v.v ... Một trong những máy tính đó tất nhiên sẽ là chủ, nhưng mã chạy vòng bảo trì phải tách biệt với bảo trì thực tế. Một vấn đề cần lưu ý. Nếu cụm của bạn phát triển khá nhiều, hãy nhớ rằng nó cần có thời gian và có thể lâu đến mức một số máy tính không được cập nhật trong một thời gian dài!
Alexis Wilke
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.