0 10 * * 3 hay * 10 * * 3? Đọc trường phút
0 10 * * 3 chạy một lần; * 10 * * 3 chạy sáu mươi lần trong một giờ. Hãy đọc trường phút, kiểm tra thứ tự các trường, rồi chờ trạng thái sẵn sàng thay vì chờ đồng hồ.
Cả hai biểu thức trông giống một buổi sáng thứ Tư, và chỉ một trong hai nghĩa là một lần. 0 10 * * 3 chạy lúc 10:00 thứ Tư; * 10 * * 3 chạy vào mỗi phút của giờ thứ mười, sáu mươi cơ hội khởi động cùng một đường hầm. Nếu lệnh là một trình khởi chạy không kiểm tra phiên đang tồn tại, phiên bản thứ hai không phải lỗi lập lịch mà là một vòng lặp tạo ra những chủ sở hữu tranh chấp. Hãy đọc trường phút trước khi đọc bất cứ điều gì khác.
Năm trường là phút, giờ, ngày trong tháng, tháng và ngày trong tuần, theo thứ tự đó, và dấu hoa thị ở trường đầu tiên nghĩa là mỗi phút.
Trường phút quyết định số lần
Con số đầu tiên là phút, nên 0 10 * * 3 là phút đầu tiên của giờ thứ mười vào thứ Tư. Thay nó bằng dấu hoa thị giữ nguyên giờ và ngày nhưng mất tính chất chỉ-một-lần, tạo ra sáu mươi lần khớp. Cron không loại bỏ trùng lặp: mỗi lần khớp lại khởi chạy lệnh. Đây không phải tiểu tiết về cron, đây là ngữ nghĩa của các trường, và nên đọc tài liệu tham chiếu của bộ lập lịch đã cài vì thứ tự trường và cột tên người dùng tùy chọn khác nhau giữa crontab người dùng và crontab hệ thống.
Hãy thử bằng một lệnh vô hại ghi lại dấu thời gian của chính nó trong một ngày. Một dòng trong nhật ký là một lịch trình; sáu mươi dòng trong một giờ là một bài học.
Lần khởi chạy thứ hai làm gì với lần thứ nhất
Một trình khởi chạy lịch sự nhận ra kết nối đã hoạt động và không làm gì cả. Một lời gọi openvpn thô thì không: nó tạo ra một tiến trình khác, một nỗ lực khác để gắn một thiết bị hoặc một cổng, và một bộ tuyến khác tranh nhau cùng các điểm đích. Trong NetworkManager, các yêu cầu kích hoạt lặp lại cho một kết nối thường là idempotent, và đó chính là lý do sự cố vẫn ẩn cho đến khi ai đó dùng một lệnh khác. Lịch trình nên hỏi chủ sở hữu đang quản lý đường hầm.
Sau đó quyết định yêu cầu có nghĩa gì khi kết nối đang được thiết lập. Cả kích hoạt trùng lặp lẫn hàng đợi các lần khởi chạy đang chờ đều không rõ ràng là đúng; hãy chọn một và để trình khởi chạy thực hiện nó, thay vì để bộ lập lịch quyết định tình cờ.
Đếm các trường trước lệnh
Crontab người dùng và crontab hệ thống khác nhau ở chỗ có cột tên người dùng trước lệnh hay không. Một mục được sao chép giữa hai loại hoặc chạy dưới tài khoản sai hoặc truyền tên người dùng làm từ đầu tiên của lệnh. Hãy kiểm tra tài liệu tham chiếu đã cài thay vì một hướng dẫn, và đếm các trường trong dòng của bạn. Một mục năm trường với từ thứ sáu trước lệnh là crontab hệ thống; cùng dòng đó trong crontab người dùng cố gắng chạy từ ấy như một chương trình.
Danh tính thực thi mang theo môi trường. Một tác vụ cron không thừa hưởng chùm khóa đã mở, lời nhắc mật khẩu tương tác hay thư mục làm việc mà bạn đã thử.
Chờ trạng thái sẵn sàng, không chờ đồng hồ
Một lần khởi chạy thành công chưa phải là đường hầm đang hoạt động. Máy khách có thể vẫn đang phân giải điểm cuối của nó, xác thực hoặc cài đặt tuyến khi tác vụ kết thúc. Bất kỳ tác vụ phụ thuộc nào cũng nên chờ tài nguyên được bảo vệ mà nó thực sự cần, với thời gian chờ có giới hạn và lỗi được ghi lại, thay vì chờ một số giây cố định. Sự khác biệt đó tách một lịch trình thường hoạt động khỏi một lịch trình thất bại âm thầm vào buổi sáng bận rộn.
Nếu cần MFA tương tác vào giờ đó, tác vụ có thể yêu cầu sự chú ý của một người nhưng không thể cung cấp câu trả lời. Hãy giữ trường hợp đó một cách rõ ràng thay vì nhúng một mật khẩu dùng lại được hoặc thử lại mãi mãi.
Đối với một lần kích hoạt thực sự chỉ một lần, hãy dùng cơ chế một lần được hỗ trợ. Một quy tắc lặp lại phải ghi nhớ và gỡ bỏ là một lần khởi chạy trùng lặp trong tương lai.