2011-02-07 46 views
7

Stack:Rake Task từ Crontab?

Apache2

Rails 2.3.8

RedHat Linux

của Ruby Enterprise 1.8.7

Got nhiệm vụ cào sau trong crontab của người dùng ứng dụng của tôi mà có nghĩa là để kéo bản ghi vào bảng cơ sở dữ liệu 15 phút một lần:

*/15 * * * * app_user cd /var/www/apps/my_app/current/ && rake thing:do_stuff RAILS_ENV=production 

Tôi có thể thấy rằng cron daemon đang chạy tác vụ này trong nhật ký cron, nhưng bảng cơ sở dữ liệu mà nó cho là kéo bản ghi vào không thay đổi. Tác vụ này đang hoạt động mà không có lỗi khi tôi chạy nó theo cách thủ công trong thư mục/var/www/apps/my_app/hiện tại và kéo các bản ghi vào bảng như tôi mong đợi.

tôi thiết lập lại biến PATH trong crontab để phản ánh bằng REE, nghĩ có lẽ đường dẫn mặc định sẽ không jive với/opt/ruby-doanh nghiệp ...

Làm thế nào để có được công việc cào này để thực sự chạy với cron?

+1

Bạn có đang chạy nó với tư cách người dùng đó không? sudo su app_user, sau đó chạy lệnh CHÍNH XÁC vì nó đang ở trong cron job. Nó sẽ hoạt động trong cron nếu nó hoạt động như thế. –

Trả lời

8

Cố gắng sử dụng đường dẫn đầy đủ cho rake nhị phân (chạy trong bảng điều khiển which rake và thay thế cào bằng đường dẫn đầy đủ).

Ví dụ, nếu which rake trả về đường dẫn sau:

/Users/bob/.rvm/gems/ruby-1.9.3-p194/bin/rake 

Bạn nên sử dụng lệnh sau đây để chạy các nhiệm vụ rake:

/Users/bob/.rvm/bin/rvm all do bundle exec rake allocator:snapshot 

và tôi thích bất cứ khi nào đá quý cho công việc cron trong ruby

Cách phát hiện xem tác vụ có bị lỗi trong cron không? Trên cron không tìm cách gửi email. Vì vậy, bạn có thể cấu hình postfix để sử dụng cài đặt smtp của bạn (từ google ví dụ), và thêm tập tin ~/.forward chỉ chứa email của bạn vào thư mục chính của người dùng đang chạy cronjob trong hệ thống của bạn.

10
0,15,30,45 * * * * /bin/bash -l -c 'cd /var/www/apps/my_app/current && RAILS_ENV=production bundle exec rake thing:do_stuff --silent'