2010-02-18 38 views
15

Tôi đã thử các phương pháp sau đây trong quá khứ:Làm thế nào để chạy tệp CodeIgniter thông qua CRON?

<?php 
set_time_limit(0); 
$_SERVER['PATH_INFO'] = 'cron/controller/index'; 
$_SERVER['REQUEST_URI'] = 'cron/controller/index'; 
require_once('index.php'); 
?> 

và đưa điều này trong một tập tin trong thư mục cài đặt CodeIgniter, gọi đó là cron.php, và sau đó gọi nó thông qua:

php /home/[username]/public_html/my_project/cron.php 

Nếu tôi nhập URL vào cron.php trong trình duyệt của tôi, nó hoạt động hoàn hảo, tuy nhiên bất cứ khi nào nó chạy qua CRON tôi nhận được lỗi 404. Đưa đoạn mã sau trong show_404() chức năng của CodeIgniter

function show_404($page = '') 
{ 
    print_r($_SERVER); 
    echo "\n\n"; 
    die ($page); 
} 

kết quả trong việc có được đầu ra sau đây gửi đến tôi:

Array 
(
    [SHELL] => /bin/sh 
    [MAILTO] => [email protected] 
    [USER] => [me] 
    [PATH] => /usr/bin:/bin 
    [PWD] => /home/[me] 
    [SHLVL] => 1 
    [HOME] => /home/[me] 
    [LOGNAME] => [me] 
    [_] => /usr/bin/php 
    [PHP_SELF] => 
    [REQUEST_TIME] => 1266479641 
    [argv] => Array 
     (
      [0] => /home/[me]/public_html/my_project/cron.php 
     ) 

    [argc] => 1 
    [PATH_INFO] => cron/controller/index 
    [REQUEST_URI] => cron/controllers/index 
) 


home/[me] 

Ở đây tôi đã [tôi] ở vị trí của tên người dùng thực tế của tôi.

Bất kỳ ý tưởng nào?

Trả lời

21

Cách đơn giản nhất để chạy cron qua CodeIgniter là tạo URL cron có sẵn thông qua ứng dụng của bạn.

Sau đó gọi nó qua wget

wget -O - -q -t 1 http://www.example.com/cron/run 

Bên trong bộ điều khiển sau đó bạn có thể sử dụng một khúc gỗ để đảm bảo cron không chạy quá thường xuyên ví dụ: nếu các robot của Google kích hoạt nó bằng cách sai lầm.

Một phương pháp thứ hai sẽ được sử dụng lynx

/usr/local/bin/lynx -source http://www.example.com/cron/run 
+0

Với get w làm tôi cần phải sao chép các dấu chấm câu như tốt? Tôi có nên sao chép toàn bộ lệnh khi bạn đưa nó? –

+0

Tuyệt vời, wget -O - -q -t 1 http://www.example.com/cron/run hoạt động! –

+0

Dấu hoa thị liên quan đến khi cron được chạy. Tôi nghĩ * những người tôi trích dẫn là để chạy cron mỗi giờ. –

2

Có một bài viết wiki về cách chạy CodeIgniter trên dòng lệnh, nhưng điều này là hữu ích hơn cho các ứng dụng mà cần phải tương tác với người dùng thông qua thiết bị đầu cuối (có một thư viện cho điều đó nữa).

http://codeigniter.com/wiki/CI_on_the_command_line/

Một lợi ích của làm nó theo cách này qua sử dụng wget là bạn có thể bảo vệ mã của bạn không bị chạy bởi người dùng hoặc chương trình với:

if(!empty($_SERVER['HTTP_HOST'])) 
{ 
    show_error('Shove off hax0r!'); 
} 
5

Bạn cũng có thể muốn thêm --spider để bỏ qua các phản ứng. Đây dừng theo yêu cầu hết thời gian chờ:

wget -O - -q -t 1 --spider http://www.example.com/cron/run 
4

Bạn cũng có thể muốn kiểm tra này: Cron job bootstrapper

Đây là một tập tin bootstrapper đơn giản mà bạn có thể sử dụng để trực tiếp điều hành các bộ điều khiển CodeIgniter của bạn từ dòng lệnh . Đó là một giải pháp rất dễ dàng và thanh lịch để sử dụng các bộ điều khiển CI cho các công việc cron. Nó cũng hỗ trợ đăng nhập.

0

Sử dụng php-cli thay vì php
Ex:

/usr/bin/php-cli /home/CPANEL_USER/public_html/index.php cronJobs deleteNotifications 
Các vấn đề liên quan