Criando uma Crontab no Magento

Olá galera!

Estes dias precisei criar um módulo para conexão com o SFTP da EmailVision para sincronização de dados entre o sistema da EmailVision e o Magento. Desenvolvi um módulo para fazer esta integração e tive a necessidade de criar Crontabs para que a sincronização ocorra pela madrugada e não impacte na performance da loja durante o período de maior movimentação.

Segue abaixo dois métodos do meu módulo que postarei aqui como exemplo:

[php]
/**
* Start new push file process to SFTP
*
* @return Shoes_EmailVision_Model_Datasync_Process
*/
public function startNewPushProcess()
{
if(!$this->isActive()) {
if($this->isLoggedIn()) {
$this->_redirect(’emailvision/adminhtml_reports/index’);
}
return;
}


}

/**
* Start new pull file process from SFTP
*
* @return Shoes_EmailVision_Model_Datasync_Process
*/
public function startNewPullProcess()
{
if(!$this->isActive()) {
if($this->isLoggedIn()) {
$this->_redirect(’emailvision/adminhtml_reports/index’);
}
return;
}


}
[/php]

Este método eu escrevi dentro de um model e já desenvolvi com flexibilidade para poder ser chamado tanto por um controller via admin quanto por uma cron configurada no config.xml.
Pois bem, é muito simples a configuração da crontab no módulo, basta você inserir as seguintes configurações no arquivo config.xmldo seu módulo:

[xml]
<crontab>
<jobs>
<emailvision_datasync_sftp_push_file>
<schedule>
<cron_expr>0 0 * * *</cron_expr>
</schedule>
<run>
<model>emailvision/datasync_process::startNewPushProcess</model>
</run>
</emailvision_datasync_sftp_push_file>
<emailvision_datasync_sftp_pull_files>
<schedule>
<cron_expr>0 6 * * *</cron_expr>
</schedule>
<run>
<model>emailvision/datasync_process::startNewPullProcess</model>
</run>
</emailvision_datasync_sftp_pull_files>
</jobs>
</crontab>
[/xml]

Nas configs acima as tags <emailvision_datasync_sftp_push_file> e <emailvision_datasync_sftp_pull_files> podem conter quaisquer nomes desde que sejam únicos, nas tags <cron_expr> devem conter as expressões de agendamento da cron e as tags <model> devem conter o método que deve ser disparado quando a cron for executada no seguinte formato: módulo/caminho_para_model::método.

Parabéns! Sua cron está configurada para o seu módulo e, caso a cron do seu servidor esteja corretamente configurada para sua loja, o Magento cuidará do agendamento de todas as crontabs dos módulos instalados.

Até a próxima!

Tiago Sampaio

Leave a comment