it-swarm-vi.tech

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

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?

37
Ben K.

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

cron kiểm tra /etc/crontab mỗi phút và ghi lại một thông báo cho biết rằng nó đã tải lại hoặc đã tìm thấy 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 journalctl -u cron của systemd, 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)

20
mivk

Một giải pháp khác gần đây hơn là tập lệnh python chkcrontab

14
Dave Wongillies

Tập lệnh Shell độc hại có tập lệnh Shell xác thực các tập tin crontab.

Bạn có thể lấy kho lưu trữ Zip chứa tập lệnh tại đây

Kịch bản được gọi là verifycron

11
Ludwig Weinzierl

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

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.

3
JDS

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.
0
conradkdotcom