Ao executar o web-agent sem interface para executar user functions verificamos que o web-agent fica perdido no gerenciador de tarefas do windows, como temos ínumeros agendamentos de tarefas, este web-agent.exe aberto consumindo memória pode impactar o funcionando do servidor!
Esse comportamento acaba sendo normal, com o tempo geralmente ele mata o processo. Acho que em uma versão mais recente isso melhorou.
Como alternativa pode executar com o seguinte comando que já abre a janela do navegador diretamente sem esse inconveniente:
Fiz uns testes rodando as tarefas, os processos web-agent.exe ficaram a semana toda no agendador de tarefas do windows, ou sejá não foram encerrados mesmo na versão mais recente!
Quanto a abrir na janela do navegador, preciso que seja exatamente ao contrário, ou seja sem interface, por isso usamos o parâmetro --headless.
Conclusão: Antes executávamos o smartclient.exe passando os parametros e era encerrado em seguida, agora isso não ocorre com web-agent, o que vai impactar e limitar bastante a nossa migração!
Entendi @giliardl então faz um outro agendamento matando o webagent, infelizmente é o que podemos fazer nesse caso.
taskkill /F /IM web-agent.exe
Para garantir que está matando o processo correto pode colocar ele em outra pasta e renomear o arquivo para um nomes específico, assim sabe que está matando o processo correto.
Outra coisa essa execução precisa mesmo ser feita na máquina do cliente ? não haveria alguma forma de executar isso no servidor? Por exemplo se é feita a leitura de arquivos no cliente, você poderia tentar melhorar o processo para que os arquivos fossem gravados em uma pasta de rede compartilhada com o servidor, assim o server conseguiria ler os dados e essa operação poderia ser feita no lado do servidor e não do cliente.
@cirilorocha quanto a rotina agendada e no caso do exemplo gerando um txt, foi apenas um exemplo, as rotinas estão agendadas em um servidor e são n tarefas.
Já tinha pensando em algo para encerrar web-agent.exe, porém não saberia inicialmente qual derrubar pois pode haver rotinas que leva um minuto e outras que levam 3 horas por exemplo.
Agora com a sua idéia de criar pasta e nome especifico, claro vou ter n nomes, mas achei bem interessante assim conseguiria com outro agendamento encerrar o web-agent correspondente.
@giliardl se isso já roda no servidor então o ideal é mesmo usar as rotinas do agendador padrão do Protheus. Comentei porque pensei que isso era na estação do usuário por algum motivo, como é no server, o ideal é o agendador mesmo.
Sim o ideal é usar o schedule do protheus, o problema que temos alguns problemas no schedule, também limitação de tempo como rodar em 1 em 1 segundo, algumas limitações e problemas usando o tempo real, mas vamos ter que reavaliar e usar, pois é o que temos.
Entendo, nesse caso acho que vale a penas desenvolver uma espécie de schedule customizado, foi que acabei fazendo em um cliente porque também estava tendo problemas com o Schedule. Não sei se esse novo melhorou nesse sentido não cheguei a usar ele ainda para saber.
Fazer essa customização dá mais trabalho, mas dependendo da quantidade de agendamentos pode valer a pena para não mais esses problemas.
Sim pensamos em desenvolver algo, o detalhe que de qualquer forma precisamos executar o web-agent para ter acesso a user function, logo vamos cair a principio no mesmo problema.
A ideia inicial é começar a migrar as tarefas que estamos rodando no schedule do windows para o shedule do protheus uma de cada vez e avaliar o comportamento e caso ocorra problema, tentar mudar até mesmo o processo.
Exemplo: Temos leitura em CLPs rodando de 1 em 1 segundo em vários IPS e endereços diferentes, essa é uma das tarefas que não conseguimos ter um bom comportamento no shedule do protheus, logo teriamos até que repensar no processo com uma controladora única gravando em um BD a parte, algo assim!
Temos muitas costumizações e rotinas bem especificas que rodam constantemente.
Como disse eu já usei um schedule customizado, nada mais é do que uma user function rodando no servidor como um Job, e ela que faz a execução das outras funções conforme os agendamentos que eu cadastrei. Para fazer uma user function rodar no appserver basta definir essas configurações no ini:
Douglas, um outro problema que notamos é que a execução do webagent em headless gera uma pasta temporaria nos arquivos temporarios do prorio chrome, com o tempo e a quantidade de execuções essa pasta pode ficar extremamente grande, consumindo muito espaço em disco.
Fica o alerta para quem estiver com alguma situação parecida
Para o caso da execução da rotina, tive que mudar toda a rotina para não ser executada pelo webagent em headless, mas sim pelo schedule do protheus. Infelizmente o webagent em headless ainda não funciona da forma como precisamos (no nosso caso)
Se sua rotina não tem interface, o ideal é que ela seja um JOB.
Sendo um JOB, você pode disparar ela de diferentes formas, uma delas é utilizar o Schedule do Protheus, que já vai te entregar o ambiente pronto para execução da rotina.