O disparo manual de uma tarefa pode sair da requisição web
Uma tarefa que reinicia serviços do servidor derrubava a própria requisição que a disparou. Agora ela pode rodar num processo separado, e o painel diz o quanto esse processo está isolado.
O botão "Disparar agora" executava a tarefa dentro da própria requisição web. Para quase toda tarefa, isso basta. Para uma tarefa que reinicia o serviço de PHP, não: a reinicialização encerra o processo que atende a requisição, o navegador recebe um erro e a tarefa morre no meio.
O agendamento normal nunca teve esse problema, porque já roda pela linha de comando.
Primeira tentativa
A tarefa passou a declarar, nos próprios parâmetros, que precisa rodar fora da requisição. O sistema a inicia como um processo separado e responde ao painel na hora. Quem sabe que a tarefa reinicia um serviço é o módulo dono dela, e não o núcleo.
Por que não bastou
Separar o processo da sessão não o tira do grupo de processos do serviço. Quando o sistema operacional reinicia o serviço, encerra o grupo inteiro, com o processo separado junto.
A solução
O sistema passou a testar três formas de iniciar o processo, da mais isolada para a menos, e usa a primeira que funcionar:
- um grupo próprio, criado pelo gerenciador de serviços;
- uma sessão remota local, que nasce em outro grupo;
- só uma sessão nova, como último recurso.
A terceira não protege contra a reinicialização, e o painel diz isso: a resposta informa qual forma foi usada e se há isolamento. Quando nenhuma está disponível, a tarefa roda como antes.
Origem: Core · BATCH-166/167