Làm cách nào để kiểm tra tập lệnh cron mới?


14

Tôi đang chạy trên một vài bản phân phối Linux khác nhau (Fedora 11, CentOS 5 và SuSE 10.2) và thường gặp phải một vấn đề trong đó một tập lệnh mới mà tôi muốn chạy như một công việc định kỳ hoạt động tốt khi được gọi trực tiếp từ dòng lệnh, nhưng thất bại khi được gọi từ cron do sự thay đổi nhỏ trong PATH hoặc các biến môi trường cần thiết khác.

Có cách nào để tôi có thể kiểm tra chạy một tập lệnh riêng lẻ như thể nó đang chạy từ cron, mà không phải chạy toàn bộ crontab hoặc sử dụng các phần chạy để chạy toàn bộ thư mục cron.daily / .hourly, v.v.? Tôi đoán rằng tôi có thể tạm thời chỉnh sửa crontab của mình để chạy tập lệnh trong vài phút tiếp theo, nhưng tôi muốn có một giải pháp độc lập hơn để tôi không có nguy cơ làm hỏng crontab.

Câu trả lời:


9

Từ google tìm kiếm trênpath in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Về cơ bản, bạn muốn đặt PATH và sau đó không phải lo lắng về các biến thể. Ngoài ra, kiểm tra nhanh là chạy tập lệnh của bạn thông qua SSH trên tất cả các hộp của bạn bằng các biến môi trường giống nhau.


Cảm ơn, tôi đã không nói rằng crontab giống như một tập lệnh trong đó bạn có thể khai báo các biến môi trường trong crontab.
gareth_bowles

7

Nếu tôi đang chạy một công việc định kỳ theo lịch trình riêng lẻ (một dòng riêng trong crontab), tôi sẽ lên lịch cho nó mỗi phút hoặc mỗi phút khi tôi đang thử nghiệm nó. Sau khi thử nghiệm, tôi sẽ chỉnh sửa dòng crontab để nó chạy theo tần suất tôi mong muốn.

Lưu ý phụ, nếu tôi muốn kiểm tra chính cron đó có hoạt động tốt không và gửi email kết quả đến đúng địa chỉ (RẤT quan trọng) tôi sẽ thêm dòng sau vào / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Chạy mỗi phút và cố gắng thực hiện lsmột thư mục không tồn tại. Nên gửi email một thông báo thất bại mỗi phút. Tôi nhận xét dòng ra khi tôi đã làm cho nó hoạt động.

Quay lại câu hỏi của bạn: Có lẽ bạn không muốn sửa đổi công việc định kỳ hiện tại để chạy thường xuyên, vì cả hai đều có cơ hội quên thay đổi lại và vì chạy cron.hourly, cron.daily hoặc cron.whever của bạn có thể có tác dụng phụ, tùy thuộc vào những gì bạn có trong đó. Để đảm bảo rằng bạn đang chạy tập lệnh trong cùng một môi trường mà nó sẽ xuất hiện khi được gọi từ cron, tôi khuyên bạn nên sửa đổi thủ thuật "ls" của mình ở trên:

Thêm một dòng vào crontab của bạn để chạy tập lệnh trực tiếp:

 * * * * * root /etc/cron.hourly/customscript

Bằng cách đó bạn có thể chạy nó thường xuyên như bạn cần kiểm tra nó.


Cảm ơn - nếu tôi có thể bỏ phiếu cho câu trả lời này là đúng, tôi sẽ làm thế!
gareth_bowles

0

Tôi không biết về một giải pháp trực tiếp hơn, nhưng bạn có thể tạo một người dùng (giả sử là người đứng đầu) với quyền riêng tư cho tập lệnh của bạn và sử dụng crontab dành riêng cho người dùng cho người dùng 'crontest' để kiểm tra tập lệnh bằng cách chỉnh sửa kịch bản sẽ chạy trong vài phút tới.

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.