Nohup

Artigo que explica como forçar que um processo no Linux não seja encerrado indevidamente (por timeout ou algo similar).

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