2009-07-31 39 views
6

Tôi đang sử dụng Ubuntu trên máy chủ và tôi đang sử dụng Putty để truy cập. Tôi muốn tạo cronjobs cho trang web php của tôi. Tôi có thể làm cái này như thế nào?Công việc Cron trên Ubuntu cho php

+0

Thuộc về serverfault. – hobodave

+0

Ngoài ra, vui lòng không hỏi câu hỏi của bạn nhiều lần, nếu bạn nhận thấy mình không giải thích chính xác, hãy nhấp vào liên kết chỉnh sửa trên câu hỏi của bạn và thêm thông tin khác. – dimo414

Trả lời

15

Nếu bạn có nghĩa là bạn muốn trang web php của bạn để làm một số nhiệm vụ thường xuyên, có hai cách có thể.

1) Bạn sử dụng cron để kéo một trang nhất định thường xuyên. Bạn có thể thực hiện việc này bằng trình duyệt dựa trên văn bản, ví dụ: Linh miêu. Bạn kéo kịch bản của bạn như thế này:

* * * * * /usr/bin/lynx http://yourhost.com/cron.php -dump > /dev/null

(Điều này sẽ gọi nó là mỗi phút Bằng cách đó bạn có thể xây dựng lịch trình của riêng bạn bên trong ứng dụng của bạn.)

2) Bạn gọi script của bạn với các dòng lệnh php phiên dịch:

* * * * * /usr/bin/php /path/to/cron.php > /dev/null

Nói chung giải pháp hai là tốt hơn. Tuy nhiên, bạn sẽ cần truy cập vào hộp. Các cron trong một giải pháp có thể được kích hoạt từ một máy chủ khác nhau, nếu bạn không thể cài đặt crons trên máy chủ.

Cũng hãy cẩn thận với một lỗ hổng phổ biến khi sử dụng phiên bản dòng lệnh của php. Trên debian (và các hệ thống tiềm năng khác) có thể có các tệp php.ini riêng biệt cho cgi, cli và mod_php. Nếu bạn đã tùy chỉnh cấu hình của mình, hãy đảm bảo rằng dòng lệnh php đang sử dụng đúng. Bạn có thể kiểm tra điều này với:

/usr/bin/php -i | less

Để đối phó với những nhận xét của Dimo ​​tôi thực hiện một số điểm chuẩn. Tôi gọi một kịch bản php địa phương đơn giản (mà chỉ echos "test") 1000 lần với lynx, wget và php-cli:

kbsilver:temp kbeyer$ time . wget.sh 

real 0m14.223s 
user 0m2.906s 
sys 0m6.335s 

(Command: wget -O /dev/null "localhost/test.php"; 2> /dev/null) 

kbsilver:temp kbeyer$ time . lynx.sh 

real 0m26.511s 
user 0m5.789s 
sys 0m9.467s 

(Command: lynx -dump "localhost/test.php"; > /dev/null) 




kbsilver:temp kbeyer$ time . php_cli.sh 

real 0m54.617s 
user 0m28.704s 
sys 0m18.403s 

(Command: /opt/local/bin/php /www/htdocs/test.php > /dev/null) 

Server là lighttpd, php(fastcgi) với APC (trên Mac OS X).

Nó chỉ ra rằng thực sự wget là công cụ tốt nhất cho công việc liên quan đến tốc độ.

Vì vậy, kết quả của php-cli không phải là đáng ngạc nhiên khi các phương pháp khác tái sử dụng một chuỗi php đang chạy với bộ nhớ cache opcode.

Vì vậy, lợi thế thực sự duy nhất của việc sử dụng php-cli là bảo mật vì tập lệnh sẽ không có sẵn từ bên ngoài vì bạn có thể đặt nó bên ngoài docroot.

(Kiểm tra này rõ ràng không chính xác 100%, nhưng sự khác biệt khá rõ ràng theo ý kiến ​​của tôi)

+1

Tôi tưởng tượng wget là một công cụ tốt hơn cho điều này hơn là lynx -dump – dimo414

1

Tôi đang giả sử bạn muốn sao lưu trang web PHP của mình? Chỉnh sửa crontab sử dụng:

crontab -e 

này sẽ khởi động một thể hiện của vi trong đó bạn có thể chỉnh sửa crontab, nhấn i cho chế độ chèn. Sau đó bạn cần để đưa vào các thông tin cho khi mục cron sẽ chạy và các lệnh để chạy vào thời điểm đó, ví dụ:

30 10 * * * tar -zcvf ./myphpsite.tar.gz /var/www/phpsite 

Vì vậy, lệnh trên sẽ tar gzip phpsite của bạn trong/var/www/phpsite tại 10:30 mỗi ngày. Thoát và bỏ vi với : wq

Xem này để tham khảo thêm:

http://www.adminschoice.com/docs/crontab.htm

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