TÀI LIỆU HƯỚNG DẪN SỬ DỤNG PEAR VÀ CRON JOB MAGENTO 1.

7 Tài liệu kỹ thuật 07/2012

Lịch sử chỉnh sửa
Ngày tháng 07/2012 Version 1.7 Mô tả Người viết DVMS

Mục lục
1. PEAR: .......................................................................................................................... 3 2. Cron job: ..................................................................................................................... 4 THÔNG TIN LIÊN HỆ HỖ TRỢ......................................... Error! Bookmark not defined.

Trang 2 /8

1. PEAR: Pear trong php: PEAR là một trong những từ ngữ được nhắc đến khá phổ biến trong cộng đồng PHP. Ở một khía cạnh nhất định, việc sử dụng PEAR sẽ giúp cho các lập trình viên giải quyết nhanh công việc với chất lượng sinh mã tốt nhờ vào sự phong phú và độ chuẩn của thư viện PEAR. Tham khảo thêm về thư viện pear tại link sau: http://www.pcworld.com.vn/pcworld/printArticle.asp?atcl_id=5f5e5c575f5f58 http://pear.php.net/ Pear trong Magento: dùng thư viện Pear để cài đặt thêm module cho Magento,để dùng chức năng này bạn phải có phần mềm connect vào hosting hay server của bạn bằng ssh. Cài các ứng dụng Magento bằng ssh đơn giản, và hiệu quả cao hơn so với Magento connect, nhất là khi đường truyền server của bạn bị hạn chế (đặc biệt với các server của FPT) vì ssh cho phép bạn kết nối lâu dài, đủ thời gian để có thể download package cài đặt về server của bạn. Ngoài ra, khi kết nối ssh, bạn sử dụng tài khoản trên server (tài khoản người dùng Linux) nên việc ghi các file, giải nén và cài đặt thường không bị lỗi. Còn với trình Magento connect nhiều khi các kết nối không thực hiện được, do việc quản lý các file, thư mục của Magento không đủ quyền để ghi, giải nén file. Bạn cần cài đặt pear trước khi thực hiện các thao tác khác, với những bạn dùng shared hosting ở các nhà cung cấp dịch vụ thì kiểm tra PHP có cài đặt Pear rồi hay chưa ? nếu chưa thì liên hệ với sysadmin ở nhà cung cấp dịch vụ để họ giải quyết vấn đề này giúp bạn . Sau khi đã tạo được kết nối ssh với server, bạn dùng các lệnh ls -a giống như lệnh dir của dos để list các thư mục và tệp tin trong thư mục hiện hành cd / để trở về thư mục cao nhất cd tên thư mục để vào thư mục Tùy theo hosting của bạn, và thư mục nơi bạn cài đặt Magento, bạn dùng các lệnh trên để đến thư mục gốc của Magento. Dùng lệnh: ./pear install EXTENSION_KEY để thực hiện việc cài đặt. Ở đây trong ví dụ này, EXTENSION_KEY là key của module mà bạn muốn cài đặt, ví dụ: Magento-core/Interface_Frontend_Default_Default_Blue Tiếp theo là chờ đợi server kết nối với server Magento, download bộ cài và cài đặt. Nếu cài đặt thành công, máy sẽ báo Installing OK và trở về dòng gõ lệnh Gõ tiếp lệnh rm -rf downloader/pearlib/cache/* downloader/pearlib/download/* để xóa các file cache tạo ra trong quá trình cài đặt Một số lỗi xảy ra trong quá trình cài đặt 1.Error: cannot download "Magento-community/BouncingOrange_TinyMce"

Trang 3 /8

Install Errors Download failed PEAR ERROR: install failed lỗi này nghĩa là server không thể download bộ cài đặt ứng dụng. Thường do đường truyền của server bạn quá yếu. Hãy thử cài bằng ssh 2. .Error: cannot write folder Lỗi này nghĩa là các thư mục trong phần downloader của bạn đang để ở chế độ chống ghi.Thư mục quan trọng nhất là downloader/pearlib/download/ 3. Error ... status="beta" Lỗi này là do extension bạn muốn cài đặt còn đang ở trạng thái beta (thử nghiệm). Để tiếp tục install bạn vào phần quản trị Magento connect, vào setting như trong hình 2, chọn Preferred State: là Beta, hoặc Anpha. 2. Cron job: Một vài tính năng trong Magento đòi hỏi một kịch bản để chạy theo định kỳ. Ví dụ: app/code/core/Mage/CatalogRule/etc/config.xml <config> ... <crontab> <jobs> <catalogrule_apply_all> <schedule><cron_expr>0 1 * * *</cron_expr></schedule> <run><model>catalogrule/observer::dailyCatalogUpdate</model></run> </catalogrule_apply_all> </jobs> ... </crontab> ...

Trang 4 /8

</config> ở đây tác vụ Mage_CatalogRule_Model_Observer::dailyCatalogUpdate sẽ được thực hiện hàng ngày vào lúc 01:00am Bạn có thể tạo ra các tác vụ cho module của bạn trong file cấu hình của module theo cấu trúc sau: <config> ... <crontab> <jobs> <namespace_module> <schedule> <cron_expr>0,15,30,45 * * * *</cron_expr> </schedule> <run> <model>module/model::method</model> </run> </namespace_module> </jobs> </crontab> ... </config> Tác vụ này cứ 15 phút lại thực thi phương thức của module một lần. Để thực hiện tất cả các tác vụ mà bạn đã cấu hình thì file cron.php nằm trong thư mục gốc Magento sẽ cần phải được chạy định kỳ, ví dụ mỗi 15 phút. Về cơ bản nó sẽ kiểm tra các tác vụ cần thực hiện trong tương lai. Trong môi trường linux thì bạn cần cấu hình cho server của bạn thực thi file cron.sh định kỳ. Một số cron job mặc định của hệ thống được cấu hình thời gian thực thi trong: System > Configuration > System.

-

Trang 5 /8

Những tác vụ đó bao gồm:

Trang 6 /8

Link tham khảo:
http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job http://www.novusweb.com/894/e-commerce-technology/understanding-magento-cron-jobs#.UA3_UaD_msp http://fishpig.co.uk/blog/magento-cron-jobs.html

Ngoài ra để Cron Schedule Monitior bạn có thể tạo file php có nội dung như sau:
<?php //Magento Cron script. GNU/GPL //oliver.higgins@gmail.com //provided without warranty or support //================================================================ //insert your database info here $server='your.server.address:port'; $user='yourusername'; $pass='yourpassword'; $db='yourMySQLdatabasenane'; //end data input //================================================================ echo "<h1>Magento Cron Schedule</h1><h2>for ".$user."@".$server."</h2>"; //================================================================ //pending jobs mysql_connect($server,$user,$pass); @mysql_select_db($db) or die("Unable to select database"); //$query="SELECT * FROM cron_schedule" ; $query='SELECT * FROM `cron_schedule` WHERE `status` ="pending" ORDER BY `scheduled_at` DESC' ; $result=mysql_query($query); $num=mysql_numrows($result); echo "<h2>".$num." Jobs Pending</h2>"; echo '<table border="1"><tbody>'; echo "<tr><th>schedule_id</th><th>job_code</th><th>status</th><th>created_at</th><th>scheduled_at</th>"; //echo "<th>executed_at</th><th>finished_at</th></tr>"; $i=0; while ($i < $num) { $schedule_id=mysql_result ($result,$i,"schedule_id"); $job_code= mysql_result($result,$i,"job_code"); $status=mysql_result ($result,$i,"status"); $created_at=mysql_result ($result,$i,"created_at"); $scheduled_at=mysql_result ($result,$i,"scheduled_at"); $executed_at=mysql_result ($result,$i,"executed_at"); $finished_at=mysql_result ($result,$i,"finished_at"); //output html echo "<tr>"; echo "<td>".$schedule_id."</td>"; echo '<td>'.$job_code."</td>"; echo '<td style="color: red;">'.$status."</td>"; echo "<td>".$created_at."</td>"; echo "<td>".$scheduled_at."</td>"; //echo "<td>".$executed_at."</td>"; //echo "<td>".$finished_at."</td>"; echo "</tr>"; $i++; }

Trang 7 /8

echo "</tbody></table><hr>"; //================================================================ //Succsessful jobs mysql_connect($server,$user,$pass); @mysql_select_db($db) or die("Unable to select database"); //$query="SELECT * FROM cron_schedule" ; $query='SELECT * FROM `cron_schedule` WHERE `status` ="success" ORDER BY `executed_at` DESC' ; $result=mysql_query($query); $num=mysql_numrows($result); echo "<h2>".$num." Jobs Succsessful</h2>"; echo '<table border="1"><tbody>'; echo "<tr><th>schedule_id</th><th>job_code</th><th>status</th><th>created_at</th><th>scheduled_at</th>"; echo "<th>executed_at</th><th>finished_at</th></tr>"; $i=0; while ($i < $num) { $schedule_id=mysql_result ($result,$i,"schedule_id"); $job_code= mysql_result($result,$i,"job_code"); $status=mysql_result ($result,$i,"status"); $created_at=mysql_result ($result,$i,"created_at"); $scheduled_at=mysql_result ($result,$i,"scheduled_at"); $executed_at=mysql_result ($result,$i,"executed_at"); $finished_at=mysql_result ($result,$i,"finished_at"); //output html echo "<tr>"; echo "<td>".$schedule_id."</td>"; echo "<td>".$job_code."</td>"; echo "<td>".$status."</td>"; echo "<td>".$created_at."</td>"; echo "<td>".$scheduled_at."</td>"; echo "<td>".$executed_at."</td>"; echo "<td>".$finished_at."</td>"; echo "</tr>"; $i++; } echo "</tbody></table>"; //================================================================ ?>

CHÚC THÀNH CÔNG!

THÔNG TIN LIÊN HỆ HỖ TRỢ

DVMS (08) 360 289 37 info@dvms.vn www.DVMS.vn

Trang 8 /8