Điểm:1

Công việc định kỳ bị trì hoãn ~1 giây

lá cờ us

Tôi đang chạy công việc định kỳ sau

* * * * * ngày "+\%Y\%m\%dT\%H\%M\%S" > /path/to/log 2>&1

nhưng nó chạy quá muộn khoảng một giây, vì nó viết, ví dụ:

20210817T210001

Làm cách nào tôi có thể đảm bảo công việc định kỳ sẽ chạy đúng phút?

RonJohn avatar
lá cờ cn
Rõ ràng - chỉ với một chút suy nghĩ - rằng cần có thời gian để cron "thức dậy", quét tất cả các crontab, xác định xem có cần chạy một mục nhập hay không. Đó là sự thật phũ phàng.
Andrej Podzimek avatar
lá cờ cn
Nếu bạn yêu cầu loại thời gian chính xác này — cũng có thể cho thấy lựa chọn sai phần mềm cho một mục đích cụ thể —, chỉ cần sử dụng bộ hẹn giờ `systemd` thay vì thiết lập `cron` đã lỗi thời hoàn toàn. Với bộ hẹn giờ `systemd`, bạn có các nút cấu hình cần thiết để đạt được sự cân bằng giữa độ chính xác của thời gian và chi phí điều phối. `AccuracySec` (có thể có giá trị bằng μs nếu cần) là từ khóa để tìm kiếm [trong tài liệu](https://www.freedesktop.org/software/systemd/man/systemd.timer.html). Ngoài ra, nếu đây là tất cả về việc ghi nhật ký dấu thời gian tròn đẹp, thì chỉ cần làm tròn dấu thời gian.
Điểm:12
lá cờ vn

Điều này cũng được đề cập tại Lỗi máy chủ.

Cá nhân tôi thích câu nói này: "Điều mà cron có thể đảm bảo là công việc của bạn sẽ bắt đầu không sớm hơn thời gian đã định." Nói cách khác, cron không thực sự được thiết kế chính xác đến từng giây. Hầu hết các công việc định kỳ của riêng tôi cũng sẽ bắt đầu sau 01 hoặc thậm chí 02 giây sau một phút đầy đủ.

Để các công việc định kỳ bắt đầu, cron sẽ quét những công việc cần chạy tại bất kỳ thời điểm nào. Sẽ không có lỗi nếu một công việc được lên lịch bắt đầu lúc 12:00:00 sẽ thực sự bắt đầu lúc 12:00:01, vì lượng thời gian để cron khởi tạo có thể khác nhau, tùy thuộc vào một số yếu tố.

Nếu bạn cần thứ gì đó để kích hoạt "gần như" (cảm ơn Kevin) vào đúng giây, bạn nên tìm giải pháp khác ngoài cron - chẳng hạn hệ thống bộ hẹn giờ (cảm ơn Andrej), tập lệnh Python hoặc thậm chí là chương trình C theo dõi thời gian cho bạn.

CHỈNH SỬA: Ngoài ra (theo đề xuất của Nonny Moose), bạn có thể lên lịch chạy tập lệnh sớm một phút, sau đó theo dõi thời gian để tập lệnh chạy chính xác nhất có thể khi bạn muốn tập lệnh chạy.

Irsu85 avatar
lá cờ cn
Và sau đó bạn có thể sử dụng crontab để chạy tập lệnh đó khi khởi động lại
Artur Meinild avatar
lá cờ vn
Vâng, thực sự! :-)
Nonny Moose avatar
lá cờ in
Bạn thậm chí có thể yêu cầu cron bắt đầu chương trình của mình, chẳng hạn sớm một phút, sau đó liên tục theo dõi thời gian cho đến khi chương trình chạy.
lá cờ ua
Về mặt mô phạm: Bạn *không thể* có thứ gì đó "kích hoạt vào đúng giây." Bạn đang chạy trong một hệ điều hành ưu tiên đa nhiệm. Hạt nhân sẽ lên lịch cho quá trình của bạn để có CPU khi hạt nhân cảm thấy thích, không phải vào một giây chính xác. Nếu bạn không thích điều đó, thì bạn sẽ phải sử dụng [sched(7)](https://man7.org/linux/man-pages/man7/sched.7.html) để yêu cầu lập lịch theo thời gian thực đảm bảo, vẫn chưa hoàn hảo vì hạt nhân có chi phí lập lịch khác không.

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