Có cách nào để xác thực định dạng / etc / crontab không?


35

Tôi thích gắn các tác vụ theo lịch trình trong / etc / crontab để tôi có thể thấy trong nháy mắt những gì được lên lịch để chạy, bất kể người dùng đó chạy như thế nào.

Gotcha duy nhất là định dạng không được xác thực khi lưu, không giống như crontab -e - vì vậy một nhân vật đi lạc có thể lặng lẽ phá vỡ toàn bộ cron.

Có cách nào để xác thực định dạng / etc / crontab trước / sau khi lưu không?


4
Nếu, giống như tôi, bạn đến đây để tìm kiếm một cách đơn giản (không phải là tập lệnh) để cho bạn biết liệu bạn đã nhập đúng cron của mình chưa, bạn có thể quan tâm đến cronchecker.net - đó là một trình xác nhận trực tuyến cho các mục cron với con người- đầu ra thân thiện.
Matt Gibson

Câu trả lời:


17

Cách đáng tin cậy duy nhất tôi tìm thấy là kiểm tra nhật ký.

cronkiểm tra /etc/crontabmỗi phút và ghi lại một thông báo cho biết rằng nó đã tải lại nó hoặc nó đã tìm thấy một lỗi.

Vì vậy, sau khi chỉnh sửa, hãy chạy này:

sleep 60; grep crontab /var/log/syslog | tail

Hoặc, để không đợi một phút, nhưng chỉ đến phút tiếp theo + 5 giây:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail

Ví dụ đầu ra có lỗi:

Jan  9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan  9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Sản lượng tốt:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)

Đó là trên Debian 8. Trên các hệ thống khác, cron có thể đăng nhập vào một tệp khác.

(Tôi nghĩ rằng tôi có thể tránh việc tìm kiếm tệp nhật ký phù hợp bằng cách sử dụng systemd journalctl -u cron, nhưng điều đó không cho tôi thấy các mục nhật ký này và thực sự dường như đã dừng đăng nhập các sự kiện cron 2 ngày trước vì một số lý do)


Đã thử nghiệm trên FreeBSD 10.3. Hoạt động như một bùa mê, chỉ cần thay thế đường dẫn nhật ký bằng / var / log / cron
Jette



3

Tôi tìm thấy giải pháp tuyệt vời này tại đây: https://crontab.guru

Nó không chỉ xác nhận crontab, nó cho bạn biết rõ ràng cái gì và khi nào crontab sẽ chạy, và làm nổi bật lỗi ở đâu.


0

Trên Ubuntu, có vẻ như tôi chỉ có thể chạy:

crontab path/to/crontab/file

LƯU Ý: điều này có tác dụng phụ khi bắt đầu cronjob này (cảm ơn @NZD)

Nếu tệp không hợp lệ, tôi sẽ báo lỗi, như:

"crontab":11: bad minute
errors in crontab file, can't install.

1
lệnh này không kiểm tra tệp crontab, nhưng đồng thời cài đặt nó (nếu nó không có lỗi). Đây có lẽ là một tác dụng phụ không mong muốn cho OP.
NZD

Cảm ơn @NZD, tôi đã thêm nó vào câu trả lời của mình để đảm bảo OP biết điều đó.
conradkdotcom

@conradk lệnh không khởi động cronjob, nó ghi đè lên tệp crontab hiện có của người dùng bằng tệp được cung cấp.
MadHatter hỗ trợ Monica

Điều này không thực sự hoạt động cho tất cả các vấn đề có thể xảy ra với crontab; nó sẽ bắt được một số vấn đề rõ ràng, nhưng nó không nắm bắt được điều này, ví dụ: * 4/0 * * /bin/myscript.sh - 4/0không hợp lệ. nhưng không bị bắt bởi phương pháp này
JDS

@JDS Không phải là một giá trị bước? Là một bước giá trị 0bị cấm? unix.stackexchange.com/questions/32027/ Ấn
conradkdotcom
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.