Dvms Pear Cronjob Magento
description
Transcript of Dvms Pear Cronjob Magento
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
Trang 2 /8
Lịch sử chỉnh sửa
Ngày tháng Version Mô tả Người viết
07/2012 1.7 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 3 /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 4 /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 5 /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 6 /8
Những tác vụ đó bao gồm:
Trang 7 /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 //[email protected]
//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 8 /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 [email protected]
www.DVMS.vn