Công cụ dành cho nhà phát triển · Trình tạo Crontab
Công việc định kỳ hoạt động trong shell nhưng không hoạt động trong crontab: PATH và môi trường
· Cách thức hoạt động
cron xác nhận developer-workflow
Cron không đọc .bashrc của bạn, không sử dụng bash và bắt đầu bằng PATH của một vài thư mục. Bài đăng này giải thích môi trường mà một công việc định kỳ thực sự có được và ba dòng khắc phục hầu hết các lỗi.
Nó hoạt động khi tôi chạy nó - tập lệnh tương tự không làm gì với crontab và không có lỗi ở bất cứ đâu bạn nhìn
Kết quả màu xanh lục cho `0 2 * * *` chứng tỏ rằng ToolAcre nhận ra lịch trình 02:00 hàng ngày. Nó không chứng minh rằng một tập lệnh tồn tại, có thể được thực thi, tìm thấy các phần phụ thuộc của nó hoặc ghi kết quả đầu ra của nó. Trình phân tích cú pháp chỉ nhận được năm trường, do đó, lỗi lệnh sau này không mâu thuẫn với việc xác thực lịch trình.
Sự khác biệt này thu hẹp việc xử lý sự cố. Trước tiên hãy xác nhận rằng ngày và giờ dự định xuất hiện trong phần mô tả và bản xem trước. Sau đó di chuyển đến máy sẽ thực thi dòng đó và kiểm tra hành vi lệnh ở đó. Việc kết hợp cả hai câu hỏi sẽ khuyến khích chỉnh sửa một biểu thức chính xác trong khi lỗi thực tế nằm ngoài dữ liệu đầu vào của trình phân tích cú pháp.
Trình tạo có thể xác thực thời gian trong khi lệnh được thực thi riêng biệt vẫn không thành công
Sổ làm việc xác nhận một tập hợp cụ thể các biến môi trường và hành vi của tệp đăng nhập. Không có điều nào trong số đó được triển khai hoặc thử nghiệm trong kho lưu trữ này. ToolAcre không khởi chạy cron daemon cũng như không ghi lại môi trường thực thi, do đó, nó không thể cho biết biến nào mà máy chủ, gói hoặc quản trị viên cụ thể cung cấp.
Ghi lại quá trình thực hiện mục tiêu và kiểm tra tài liệu của nó hoặc quá trình chẩn đoán vô hại. Đầu vào phụ thuộc vào môi trường duy nhất của trình tạo là múi giờ được chọn để xem trước. Vùng đó ảnh hưởng đến các thời điểm ứng cử viên được hiển thị; nó không mô phỏng các biến quy trình, thư mục chính, thông tin xác thực hoặc tệp khởi động cho lệnh trong tương lai.
Các biến môi trường được cung cấp bởi cron daemon là bằng chứng kho lưu trữ bên ngoài
Không có shell nào nhận được biểu thức bên trong ToolAcre. `parseCron` mã hóa các trường lịch trình được phân tách bằng khoảng trắng, mở rộng ngữ pháp và điểm dừng nhỏ của chúng. Ngay cả hành động “Sao chép dòng crontab” cũng thêm `/usr/local/bin/your-command` làm phần giữ chỗ rõ ràng. Nó không chọn shell hoặc kiểm tra cú pháp shell.
Do đó, mảng, điều kiện, sự thay thế và hành vi shebang cố tình vắng mặt trong tuyên bố của bài viết này. Một lệnh có thể hợp lệ đối với một shell và không hợp lệ đối với một shell khác trong khi năm trường thời gian của nó vẫn giống hệt nhau. Kiểm tra riêng hợp đồng thực hiện thực tế thay vì coi lịch trình mà con người có thể đọc được dưới dạng chứng nhận lệnh.
Shell lệnh không được phân tích cú pháp hoặc chọn bởi công cụ này
Các dòng gán như `PATH=...` hoặc `SHELL=...` không được hộp biểu thức chấp nhận. Họ có ít hơn năm trường thời gian và không xác thực được. Điều này đúng cho mục đích hẹp của tuyến đường: trình phân tích cú pháp của nó là trình phân tích cú pháp biểu thức, không phải là trình phân tích cú pháp tệp crontab hoàn chỉnh.
Không dán văn bản cấu hình cho đến khi vượt qua một dòng. Hãy tách biệt việc xây dựng lịch trình, sau đó tập hợp các tệp xung quanh theo ngữ pháp riêng của mục tiêu. Điều này tránh được lỗi danh mục nguy hiểm trong đó việc từ chối của một công cụ được hiểu là bằng chứng cho thấy một tính năng môi trường nói chung là không hợp lệ.
Cú pháp gán Crontab nằm ngoài đầu vào năm trường
Hành vi đường dẫn tuyệt đối và tương đối thuộc về quá trình cuối cùng chạy lệnh. ToolAcre không gọi `chdir`, kiểm tra hệ thống tệp hoặc giải quyết các tệp thực thi. Danh sách nguồn của nó chứa các điều khiển số học và trình duyệt lịch, không phải mã sinh ra quy trình. Một biểu thức được sao chép không mang thông tin thư mục làm việc.
Đánh giá triển khai phải xác định tệp thực thi, đường dẫn dữ liệu và tài khoản một cách độc lập. Những lần kiểm tra đó có thể phát hiện ra một tệp bị thiếu ngay cả khi mọi thời gian xem trước đều chính xác. Lịch trình có thể được sử dụng lại bên cạnh các lệnh khác nhau, đó chính xác là lý do tại sao việc phân tích cú pháp thành công không thể ngụ ý rằng bất kỳ lệnh nào cũng có thể truy cập được.
Đường dẫn và thư mục làm việc vẫn là mối lo ngại về triển khai
Sử dụng lệnh vô hại, có thể quan sát được đã chọn cho hệ thống đích sau khi xác thực đoạn thời gian. Xác nhận rằng nó chạy trong tài khoản và môi trường dự định, sau đó chỉ thay thế nó sau khi hiểu được những điều kiện đó. ToolAcre đóng góp biểu thức và thời gian theo lịch dự kiến; bằng chứng phía máy chủ góp phần thực hiện hành vi.
Ví dụ: xây dựng `30 2 * * *` và xác minh rằng mô tả cho biết 02:30 mỗi ngày trong vùng đã chọn. Chỉ sao chép những trường đó vào công việc triển khai. Bài viết không quy định đường dẫn Python, môi trường ảo hoặc chuyển hướng vì không có triển khai tương ứng nào tồn tại trong kho lưu trữ để chứng minh điều đó.
Ranh giới đã hoạt động: xác thực lịch trình, sau đó kiểm tra lệnh vô hại trong môi trường mục tiêu
Bộ lập lịch vùng chứa, bộ tính giờ systemd và các sản phẩm đám mây có thể hiển thị các mô hình lệnh và môi trường khác nhau. Họ cũng có thể sử dụng các ngữ pháp giống với cron. Tuyến đường này không phát hiện các nền tảng đó, đọc tệp đơn vị hoặc dịch cài đặt của chúng, vì vậy lời khuyên thực thi đa nền tảng sẽ chỉ là suy đoán.
Nếu đích từ chối biểu thức hợp lệ ToolAcre, hãy so sánh số trường của nó và toán tử được hỗ trợ trước khi thay đổi giá trị. Nếu nó chấp nhận biểu thức nhưng nhiệm vụ không thành công, hãy để nguyên lịch trình trong khi điều tra hợp đồng lệnh của đích. Ngã ba đó giữ việc gỡ lỗi ngữ pháp tách biệt khỏi việc gỡ lỗi thời gian chạy.
Các bộ lập lịch và vùng chứa khác không được lập mô hình
Một dòng cron kết hợp hai hệ thống: biểu thức lịch và hành động thực thi. ToolAcre chỉ sở hữu nửa đầu. Nó xác nhận phạm vi, danh sách, bước, bí danh và ngữ nghĩa trường ngày, sau đó mô tả và xem trước chúng. Nó không đảm bảo việc thực thi và không được sử dụng làm bằng chứng cho thấy lệnh đã thành công.
Coi đầu ra của trình tạo như một đoạn lịch trình đã được kiểm tra. Giữ nguyên vùng đã chọn bên cạnh nó, kiểm tra hành động nơi nó sẽ chạy và thu thập kết quả có thể quan sát được ở đó. Ranh giới kỷ luật này hữu ích hơn lời khuyên chung chung về một daemon giả định vì nó cho bạn biết chính xác tín hiệu xanh nào bạn đã nhận được.