Quando trabalhamos com sistemas de informação, existem momentos em que precisamos executar scripts que demoram muito tempo. Seja para corrigir algum erro do sistema, seja para realizar um processamento demorado em função do volume de dados. Nestes casos, não é recomendado deixar estas operações acessíveis via Web, já que o usuário final normalmente não está interessado em esperar mais que um minuto para obter o resultado de um processamento.
Podemos fazer um script para ser executado na linha de comando (shell) usando php-cli, mas executá-lo diretamente também recai sobre o mesmo problema: quem quer ficar esperando o script terminar?
Para solucionar este problema, existe o comando do Linux chamado nohup. Com ele, o script é executado em segundo plano e não é abortado mesmo se o usuário que invocou o script se desconecte do computador servidor. Supondo que criamos um script chamado demorado.php, podemos invocá-lo assim:
$ nohup php demorado.php &
Para invocá-lo diretamente (sem nohup), seria assim:
$ php demorado.php
Para fazer isso em um script PHP, basta usar a função shell_exec em sistemas semelhantes a Unix ou a classe COM em Windows:
// Executar em segundo plano em sistemas semelhantes a Unix shell_exec('nohup php script.php >& /dev/null &'); // Executar em segundo plano em Windows $shell = new COM('WScript.Shell'); $shell->run('php script.php', 0, false);
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com