Công cụ dành cho nhà phát triển · Trình tạo Crontab
Dấu phần trăm, dấu ngoặc kép và biến: tại sao dòng cron ngắt âm thầm
· Tại sao nó quan trọng
cron vỏ bọc xác nhận
Dòng crontab không phải là dòng shell và một vài ký tự ở đó có ý nghĩa khác. Bài đăng này giải thích quy tắc ký hiệu phần trăm, giới hạn gán biến và trích dẫn, vì vậy các lệnh sẽ thực hiện những gì chúng đã làm trong thiết bị đầu cuối.
Trình phân tích cú pháp biểu thức này không thể chẩn đoán lỗi tên tệp sau trường thứ năm
Nếu tên tệp sao lưu được tạo trống thì biểu thức thời gian có thể vẫn đúng. `0 3 * * *` chọn 03:00 mỗi ngày; các ký tự sau trường thứ năm không bao giờ nhập vào trình phân tích cú pháp của ToolAcre. Không nên "khắc phục" lỗi phía lệnh bằng cách thay đổi phút hoặc giờ trừ khi bản xem trước mâu thuẫn với mục đích.
Tách dòng trước khi chẩn đoán. Dán năm trường đầu tiên vào trình tạo, đọc mô tả và ghi chú thời gian sắp tới. Kiểm tra lệnh còn lại bằng cách triển khai cron và shell thực tế. Sự phân chia này ngăn không cho cú pháp lịch và cú pháp lệnh bị gỡ lỗi như thể chúng là một ngôn ngữ.
Ngữ nghĩa của lệnh ký hiệu phần trăm không được triển khai hoặc kiểm tra ở đây
Sổ làm việc nêu rõ một phép biến đổi ký hiệu phần trăm đặc biệt. Không có từ vựng tương ứng nào tồn tại trong `cron.js`; trình đọc trường của nó chấp nhận các chữ số, tên được hỗ trợ và dấu câu được sử dụng theo phạm vi, danh sách và bước. Giao diện người dùng cũng dừng phân tích cú pháp sau hộp biểu thức. Nó không thể chứng minh điều gì xảy ra với phần trăm ký tự trong lệnh được triển khai.
Bởi vì việc triển khai cron và trình phân tích cú pháp tệp hoàn chỉnh có thể khác nhau nên bài viết này không phổ biến quy tắc đó từ một bản phác thảo chưa được xác minh. Tham khảo hướng dẫn sử dụng mục tiêu và sao chép với đầu vào vô hại. Giải thích về lịch trình của trình duyệt không phải là bằng chứng về việc xây dựng stdin, chuyển đổi dòng mới hoặc xử lý tải trọng lệnh.
Lời khuyên trốn thoát cần có bằng chứng cụ thể về mục tiêu và bị bỏ qua
Việc thoát dấu gạch chéo ngược cũng thuộc về ngữ pháp lệnh. ToolAcre không thể biết liệu một lớp có sử dụng dấu gạch chéo ngược trước lớp khác hay không và nó không bao giờ gọi một lớp vỏ để quan sát kết quả. Do đó, việc xuất bản một dòng thoát sẵn sàng cho bản sao sẽ vượt quá bằng chứng nguồn và có thể sai đối với một mục tiêu khác.
Chuyển việc xây dựng lệnh phức tạp thành một tập lệnh được thử nghiệm riêng biệt khi điều đó phù hợp với môi trường, nhưng hãy xác thực cách tiếp cận đó ở đó. Giữ biểu thức ổn định trong khi thử nghiệm. Khiếu nại có thể bảo vệ duy nhất từ kho lưu trữ này là năm trường thời gian có thể được sao chép độc lập với bất kỳ lệnh nào theo sau.
Các phép gán biến không được chấp nhận
Dòng `KEY=value` không có năm trường lịch trình và bị trình phân tích cú pháp này từ chối. Không có mô hình gán, công cụ mở rộng hoặc bảng môi trường trong công cụ. Liệu một crontab thực sự có chấp nhận các bài tập hay không và cách nó diễn giải các giá trị của chúng phải được chứng minh từ hệ thống đó.
Sự khác biệt này bảo vệ các cuộc thảo luận về tính di động. ToolAcre chấp nhận `JAN` làm tên tháng không nói gì về `$HOME` trong dòng cấu hình. Cả hai có thể xuất hiện trong một tệp crontab, nhưng chỉ biểu thức lịch thuộc về ngữ pháp đã triển khai được xem xét cho các bài viết này.
Báo giá và lựa chọn shell nằm ngoài ranh giới của trình tạo
Các trích dẫn chỉ là các ký tự thông thường sau ranh giới lịch trình mà ToolAcre không bao giờ vượt qua. Quy tắc năm trường chính xác của nó coi các mã thông báo khoảng trắng bổ sung là một biểu thức không hợp lệ thay vì cố gắng khám phá một lệnh được trích dẫn. Dòng giữ chỗ được sao chép là sự thuận tiện cho đầu ra chứ không phải là trình xác thực toàn dòng.
Lựa chọn vỏ cũng không có. Không có `spawn`, `exec` hoặc trình thông dịch lệnh trong đường dẫn nguồn. Kiểm tra trích dẫn trong môi trường thực thi sẽ thực sự nhận được nó và tránh tuyên bố rằng trình tạo đã phê duyệt một dòng chỉ vì tiền tố thời gian vẫn hợp lệ.
Ranh giới đã hoạt động: xác thực 0 3 * * * độc lập với lệnh được đóng dấu ngày
Đối với yêu cầu sao lưu được đánh dấu ngày, trước tiên hãy xác thực `0 3 * * *`. Công cụ này phải mô tả 03:00 hàng ngày và hiển thị các ứng viên trong vùng đã chọn. Bảo tồn đoạn đã được xác minh đó. Sau đó, xây dựng một thử nghiệm bên lệnh vô hại để chứng minh tên tệp mong muốn trong bộ lập lịch mục tiêu.
Hai lần kiểm tra độc lập tạo ra bằng chứng rõ ràng hơn: một ảnh chụp màn hình hoặc xác nhận cho mục đích lịch, một kết quả khác được ghi lại để chuyển đổi lệnh. Nếu tên file sai nhưng thời gian thí sinh đúng thì lịch trình không cần chỉnh sửa. Nếu cả hai đều sai, hãy giải quyết từng ngôn ngữ bằng tài liệu riêng.
Nội dung này không đề cập đến — các vấn đề về môi trường và PATH được đề cập trong bài đăng của chính họ
Hành vi của môi trường và đường dẫn cũng vẫn nằm ngoài trình tạo nên bài viết này không chuyển hướng các chủ đề đó sang một giải pháp khác không được hỗ trợ. Thay vào đó, nó báo cáo ranh giới: tuyến đường xây dựng các biểu thức năm trường, mô tả bằng ngôn ngữ đơn giản, cảnh báo và các ứng cử viên đồng hồ treo tường trong tương lai.
Việc triển khai cron hoàn chỉnh cần nhiều bằng chứng hơn thế. Coi các ký tự đặc biệt, biến và độ phân giải thực thi là mối quan tâm của phía máy chủ. Việc trình tạo từ chối phân tích cú pháp chúng rất hữu ích vì nó ngăn cản một công cụ lịch hẹp âm thầm giả vờ hiểu ngữ nghĩa lệnh.
Bài học rút ra: biết các ký tự mà cron sở hữu — và giữ lịch trình chính xác với trình tạo trong khi bạn sửa lệnh
Các dòng cron có thể chứa hai ngữ pháp được phân tách bằng vị trí. ToolAcre chỉ thực hiện ngữ pháp đầu tiên, kết thúc sau ngày trong tuần. Dấu phần trăm, dấu ngoặc kép và biến có thể quan trọng sau này nhưng chúng không thể thay đổi ý nghĩa của `0 3 * * *` bên trong trình phân tích cú pháp này.
Giữ những câu hỏi đó riêng biệt trong phần đánh giá và ghi chú sự cố. Xác minh ý định lập lịch trong trình duyệt, sau đó xác minh hành vi lệnh trên mục tiêu bằng dữ liệu không nhạy cảm. Điều đó tạo ra bằng chứng chứ không phải văn hóa dân gian và tránh việc rửa một yêu cầu trong sổ làm việc thành một sự đảm bảo mà mã không bao giờ thực hiện.