Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hinom

Criando agendamento CRON com o PHP

Recommended Posts

Escopo de um agendamento CRON

minuto hora dia mês dia_da_semana php /caminho/completo/do/arquivo.php

*Para assegurar-se, especifique o caminho completo do binário do PHP.
Geralmente no path "/usr/sbin/php"

Um exemplo simples, agendando para executar as 13 horas e 0 minutos do dia 3 de Dezembro:

00 13 03 12 * /usr/sbin/php /caminho/completo/do/arquivo.php

[table=.]

[tr][td]minuto[/td][td]hora[/td][td]dia[/td][td]mês[/td][td]dia da semana[/td][/tr]
[tr][td]00[/td][td]13[/td][td]03[/td][td]12[/td][td]*[/td][/tr]
[/table]




/**
* Gera o arquivo contendo o shell script
*/
$script_path = '/caminho/completo/do/arquivo.php';
$php_bin     = '/usr/sbin/php';

$file    = '/caminho/do/arquivo/processos.sh';
$dt['i'] = '00'; // minute
$dt['H'] = '13'; // hour
$dt['d'] = '03'; // day
$dt['m'] = '12'; // month
$dt['w'] = '*';  // week
$content = implode( ' ', $dt ) . ' ' . $php_bin . ' ' . $script_path;

file_put_contents( $file, $content );

if( !file_exists( $file ) )
{
    throw new \Exception('Oooops.. "' . $file . '" not found');
}

/**
* Adiciona o script ao crontab
*/
exec('crontab ' . $file, $output, $return);
if($return === 0) {
    //echo 'Cron Successful';
}else{
    // Aqui vc debuga algum erro.
}





[*Notas]

Permissões de execução

O arquivo processos.php, ou seja, o arquivo que executará a criação do agendamento CRONTAB, deve ser executado sob um usuário que possua permissões de execução de comandos shell.

Para verificar qual usuário executa o arquivo "processos.php", faça um simples debug:

echo exec('whoami');

Retornará algo como apache2handle, apache, apache2, wwwuser ou coisas do tipo.


Caso o usuário não possua permissões, verifique com o administrador do servidor.



Periodicidade e remoção do agendamento

Ao completar o processo, remova-o do agendamento caso não necessitar que seja executado novamente sob as regras agendadas.

define( 'ENV_OWNER' , 'webuser' );

/**
* Workaround to avoid script delete root jobs if someone executes the script under root privilegies
*/
$user = ( exec('whoami') == 'root' ) ? ' -u ' . ENV_OWNER : '';

shell_exec( 'crontab -r' . $user); // remove all jobs for current or specified user




Ferramentas úteis:

Geradores de sintaxes CRON:
http://www.generateit.net/
http://www.easycron.com/generator/cronjob
http://bit.ly/18e0mIt


Documentação PHP

http://php.net/implode
http://php.net/exec
http://php.net/shell_exec
http://php.net/implode
http://php.net/file_put_contents

Compartilhar este post


Link para o post
Compartilhar em outros sites

#2 Sem querer ser grosseiro, mas isso aqui não é suporte técnico. Se liga malandro..

 

Se vc tiver algo útil a acrescentar, ao artigo, será bem vindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

#2 Sem querer ser grosseiro, mas isso aqui não é suporte técnico. Se liga malandro..

 

Se vc tiver algo útil a acrescentar, ao artigo, será bem vindo.

 

 

Boa tarde,

 

 

Eu sei que o forum não é suporte técnico, o imaster é destinado a pessoas que tem conhecimento na área e tem dúvidas. Postei um assunto que tenho dúvidas e sem querer achei o seu post e vi que você tem um grande conhecimento no tópico. Eu não sou malandro estou apenas em busca de conhecimento, se você não gostou tudo bem, respeito o seu ponto de vista, mas então era só você não responder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.