2013-02-20 22 views
15

tôi có các mục sau đây trong crontab:Chuyển hướng đầu ra của một công việc cron

0 5 * * * /bin/bash -l -c 'export RAILS_ENV=my_env; cd /my_folder; ./script/my_script.rb 2>&1 > ./log/my_log.log' 

Kết quả của việc này là tôi nhận được đầu ra của ./script/my_script.rb trong ./log/my_log.log. Hành vi này là mong muốn. Điều gì là tò mò là tôi cũng nhận được đầu ra trong thư địa phương của tôi. Tôi tự hỏi làm thế nào đầu ra của kịch bản của tôi đang bị bắt bằng thư. Vì tôi đang chuyển hướng đầu ra tới một tệp nhật ký, tôi hy vọng rằng công việc cron của tôi sẽ không có đầu ra, và do đó tôi sẽ không nhận được thư khi công việc cron chạy. Bất cứ ai có thể tiết lộ một số ánh sáng như thế nào thư có thể để có được sản lượng của ./script/my_script.rb?

Trả lời

24

Đơn đặt hàng chuyển hướng của bạn không chính xác. Stderr không được chuyển hướng đến tệp, nhưng đang được gửi tới stdout. Đó là những gì bạn phải nhận được trong thư của bạn.

Fix chuyển hướng bằng cách thay đổi công việc định kỳ của bạn để:

0 5 * * * /bin/bash -l -c 
'export RAILS_ENV=my_env; 
cd /my_folder; 
./script/my_script.rb > ./log/my_log.log 2>&1' 
+8

N.B. bạn cũng có thể sử dụng '&>' để chuyển hướng cả hai cùng một lúc. Nó hoạt động trong zsh và bash. – Kevin

+0

Tôi đã bị ấn tượng rằng cú pháp của tôi đã chuyển hướng stderr thành stdout và stdout vào tệp nhật ký của tôi, phải không? Bạn có thể giải thích thêm một chút không? Cảm ơn đã giúp đỡ. –

+2

Bạn đã chuyển hướng stderr tới bất cứ nơi nào xuất hiện (ví dụ:/dev/stdout), và sau đó stdout vào tệp nhật ký của bạn. Stderr không thay đổi sau khi chuyển hướng thứ hai. Nó vẫn đang đi đến/dev/stdout. – dogbane

2

Hãy thử đổi số 2>&1 với > ./log/my_log.log.

+3

N.B. bạn cũng có thể sử dụng '&>' để chuyển hướng cả hai cùng một lúc. Nó hoạt động trong zsh và bash. – Kevin

+3

@Kevin nếu bạn làm điều này, sau đó bạn phải đặt SHELL trong crontab của bạn để được bash, nếu không nó sẽ (có thể) sử dụng sh, và không làm việc – Squidly

1

Đánh giá bởi this answer bạn chỉ cần chuyển đổi thứ tự của các chuyển hướng:

0 5 * * * /bin/bash -l -c 'export RAILS_ENV=my_env; cd /my_folder; ./script/my_script.rb > ./log/my_log.log 2>&1'