No esforço de trazer algumas das vantagens do Linux para meus clientes que executam o Windows 10, desenvolvi alguns scripts bash para automatizar algumas de suas tarefas diárias.
Eu costumo deixá-los executar os scripts através de um lote do Windows com o seguinte conteúdo:
Ubuntu1804 run /usr/local/bin/script.sh
Infelizmente, alguns dos scripts estão demorando muito, seja para grandes consultas sql ou operações lentas de rede e E/S, e durante essa espera alguns usuários simplesmente não conseguem evitar fechar a "janela preta estranha", matando assim o processo.
O comando acima será eliminado mesmo se colocado entre aspas com & no final.
Eu tentei o seguinte e não consegui testOK
na minha área de trabalho.
Ubuntu1804 run "sleep 10 && touch /mnt/c/Users/myuser/Desktop/testOK &"
Enquanto isso mantém a janela aberta e cria o arquivo testOK
.
Ubuntu1804 run "sleep 10 && touch /mnt/c/Users/myuser/Desktop/testOK"
Eu queria saber se existe uma maneira de evitar que o processo no Ubuntu WSL seja morto assim que a janela for fechada.
Impedir que a janela apareça seria ótimo também.
Impedir que o usuário interaja com ele seria uma solução alternativa aceitável.
Os clientes são o Windows 10 Professional com o pacote cumulativo de segurança e qualidade mais recente, não estou fornecendo detalhes do site, pois isso está acontecendo em mais de um cliente, alguns deles são grandes domínios do MS AD, outros são pequenos escritórios com apenas um grupo de trabalho.
O Linux X11 envia um SIGHUP para processos em execução que possuem um identificador de arquivo aberto na janela do terminal quando a janela do terminal é fechada. Todos os programas, por padrão, têm identificadores de arquivo stdin, stdout e stderr abertos na janela do terminal que gerou o programa. O WSL emula esse comportamento.
Uma solução é usar 'nohup'. Se test.sh for:
Então você pode executá-lo assim:
Se eu fechar imediatamente a janela cmd depois de digitar essa linha, recebo um arquivo "nohup.out" em D: (meu diretório de trabalho atual) que possui o texto gerado por test.sh e, alguns segundos depois, recebo testOK no meu Ubuntu diretório inicial. Você pode mudar as coisas dentro do seu script .bat para colocar o nohup.out em outro lugar.
Você pode criar um arquivo .vbs assim:
A última linha, o "0" significa não mostrar uma janela, "1" significaria mostrar a janela.
Eu acho que isso deve realizar o que você está tentando fazer.