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:

/**
 * 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;
	}

	...
}

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:

<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>

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 Reply

Navigate