好吧,这已经让我抓狂了4个小时了。我想对Magento做一个cronjob。以下是我的相关目录结构:
|app
|code
|local
|MOST
|Wallet
|etc
|config.xml
|Model
|Cron.php
以及我的config.xml
<?xml version="1.0"?>
<config>
<modules>
<MOST_Wallet>
<version>0.1.0</version>
</MOST_Wallet>
</modules>
<global>
<helpers>
<wallet>
<class>MOST_Wallet_Helper</class>
</wallet>
</helpers>
<models>
<wallet>
<class>MOST_Wallet_Model</class>
</wallet>
</models>
</global>
<crontab>
<jobs>
<most_wallet>
<schedule>
<cron_expr>* * * * *</cron_expr>
</schedule>
<run>
<model>MOST_Wallet/cron::updateWallet</model>
</run>
</most_wallet>
</jobs>
</crontab>
</config>
文件Cron.php存在,并且其中有updateWallet方法,检查是否有拼写错误:)
cron没有启用,但这是不相关的,因为现在我试图使cron.php通过直接打开它来手动执行我的脚本。这种测试方法有效,因为所有其他cron任务似乎都工作得很好。
现在,cron作业失败了。经过一番搜索,我发现了正在抛出的错误。
警告:include(Mage/MOST/Wallet/Model/Cron.php): failed to open stream: No such file or directory in/var/www.magento_test/lib/Varien/autolload .php第93行
你们可以看到,由于某种原因,Magento试图从Mage文件夹加载我的Cron类,而不是从本地文件夹。这会导致Cron Observer抛出"Invalid callback"异常。
如果有人知道是什么原因引起的,我将非常感激。
编辑:正如Dushyant Joshi所说,配置应该是:
<config>
---
<crontab>
<jobs>
<most_wallet>
<schedule>
<cron_expr>* * * * *</cron_expr>
</schedule>
<run>
<model>wallet/cron::updateWallet</model><!-- change here -->
</run>
</most_wallet>
</jobs>
</crontab>
这个错误也是类MOST_Wallet_Model_Cron的名字中的一个错字。毕竟,错别字会造成最严重的错误。
欢呼。
按如下方式修改代码:
<config>
---
<crontab>
<jobs>
<most_wallet>
<schedule>
<cron_expr>* * * * *</cron_expr>
</schedule>
<run>
<model>wallet/cron::updateWallet</model><!-- change here -->
</run>
</most_wallet>
</jobs>
</crontab>
</config>
刷新缓存,然后检查