Eu trabalho em um aplicativo da Web um tanto grande, e o back-end é principalmente em PHP. Existem vários lugares no código em que preciso concluir alguma tarefa, mas não quero fazer o usuário esperar pelo resultado. Por exemplo, ao criar uma nova conta, preciso enviar a eles um email de boas-vindas. Mas quando eles apertam o botão 'Concluir registro', não quero fazê-los esperar até que o email seja realmente enviado, só quero iniciar o processo e retornar uma mensagem ao usuário imediatamente.
Até agora, em alguns lugares, tenho usado o que parece um hack com exec (). Basicamente, fazendo coisas como:
exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
O que parece funcionar, mas estou me perguntando se existe uma maneira melhor. Estou pensando em escrever um sistema que enfileire tarefas em uma tabela MySQL e um script PHP de execução longa separado que consulta essa tabela uma vez por segundo e executa as novas tarefas que encontrar. Isso também teria a vantagem de me permitir dividir as tarefas entre várias máquinas operadoras no futuro, se eu precisasse.
Estou reinventando a roda? Existe uma solução melhor do que o exec () hack ou a fila do MySQL?