2011-11-15 36 views
25

Tôi đã thêm một công việc định kỳ gần đây, nhưng đã phạm sai lầm trong đường dẫn trong khi đưa ra lệnh và do đó, công việc không bao giờ thành công. Có cách nào để kiểm tra các thay đổi cron chúng tôi đã làm?Kiểm tra chạy cron nhập

Xin lưu ý rằng tôi đã thực sự sao chép và dán lệnh từ dòng lệnh của tôi và nó chỉ là một phím bấm đi lạc gây ra điều này.

Trả lời

20

Câu hỏi này cũng đã được hỏi về serverfault and has garnered a couple additional answers

Sau đây là một phiên bản diễn giải của Marco's solution: (Không chắc chắn nếu ediquite tốt nhất là không cung cấp một liên kết chỉ trả lời hay không sao chép một ai đó giải pháp của người khác)

Tạo tệp môi trường có mục nhập cron tạm thời

* * * * * /usr/bin/env > /home/username/cron-env 

Sau đó tạo tập lệnh shell có tên run-as-cron thực thi lệnh sử dụng tha t môi trường.

#!/bin/sh 

. "$1" 
exec /usr/bin/env -i "$SHELL" -c ". $1; $2" 

Nó sau đó được sử dụng như thế này:

run-as-cron <cron-environment> <command> 

ví dụ

run-as-cron /home/username/cron-env 'echo $PATH' 
+0

Bạn lấy lệnh ** ở đâu -as-cron **? –

+0

@IgorGanapolsky Tôi không chắc chắn, nhưng nó có thể là tên của kịch bản lệnh shell ở trên. – ptf

+0

"tạo tập lệnh shell có tên run-as-cron" – RichardAtHome

38

Khi tôi muốn kiểm tra công việc cron của mình, tôi thường đặt khoảng thời gian rất thấp và theo dõi chặt chẽ nhật ký. Khi tôi tin rằng mục nhập là chính xác, tôi đặt khoảng thời gian quay trở lại một giá trị lành mạnh.

Ví dụ, chạy việc mỗi hai phút:

*/2 * * * * echo "Hello World"

Và tôi chạy tail -f trên log file của tôi (/var/log/syslog trên debian).

+6

Đó là những gì tôi làm, ngoại trừ một phút ... nhưng tôi ước có một cách để yêu cầu crontab chạy nó bằng một lệnh, vì vậy người đó sẽ không phải đợi đến một phút cho đến khi crontab thực hiện lệnh, chỉ để xem nó có chạy hay không. – Teekin

+0

Bạn sẽ nhận được gần nhất bằng cách chạy '/ bin/sh'. Sau đó, một lần nữa, bạn không nên chạy các lệnh phức tạp trực tiếp từ cron. Sử dụng tập lệnh bên ngoài thay thế! –

+2

Chính xác, vì vậy khi các/bin/sh chạy hoạt động nhưng không phải là công việc cron, nó được khá bực bội gỡ lỗi nó, ngay cả khi nó chỉ là chờ đợi của 40-50 giây để xem nếu nó hoạt động thời gian tới. – Teekin

2

Câu trả lời của Joshua không phù hợp với tôi. Hai vấn đề:

  • Các biến trong cron-env tệp không được xuất (set -a cần thiết).

  • Tập lệnh vẫn được gắn với tty hiện tại (setsid cần thiết).

Kịch bản run-as-cron nên

#!/bin/sh 

. "$1" 
exec setsid /usr/bin/env -i "$SHELL" -c "set -a; . $1; $2" </dev/null 

Không đủ đại diện' để khắc phục câu trả lời của mình hoặc thêm nhận xét ...

0

lệnh sử dụng crontab -e này sẽ mở ra một trình soạn thảo vim và tất cả những gì bạn phải làm ở đây là * * * * * /somepath/urscript.sh, đảm bảo rằng bạn có khoảng cách thích hợp giữa các ngày và đường dẫn của tập lệnh Sau khi thực thi, bạn có thể kiểm tra trong/var/spool /thư sẽ có một dấu vết hoàn chỉnh của việc thực thi tập lệnh hoặc các lỗi. Đối với thử nghiệm không có cách nào .. nhưng trong trường hợp ur sh urscript.sh hoạt động sau đó cron tab sẽ không có vấn đề vì nó là chính xác cùng một điều gì u làm bằng tay.

Các vấn đề liên quan