Não é possível gerar processo em segundo plano

1

Minha equipe está usando o Pallet (pense no Puppet in Clojure) para automatizar o provisionamento de servidores, mas enfrentando um problema bastante fundamental: o Pallet pode executar scripts arbitrários diretamente em VMs de destino, mas se um desses scripts colocar um comando em segundo plano simplesmente não é executado. Pelo menos, não da maneira como estamos tentando projetar as coisas.

Nós tentamos isso usando & e tela, com o último sendo o ideal, e nem funciona. Por exemplo, tentamos fazer com que o Pallet execute o seguinte script na VM de destino ...

touch a
touch b &
touch c

e tudo o que vemos remotamente é que os arquivos a e c existem. O shell (ou eu quero dizer processo?) Em que o script principal executado simplesmente se recusou a executar 'toque b'. Por outro lado, se executarmos esse script com uma sessão de terminal comum no mesmo host, tudo funcionará bem.

Claro, estamos atacando isso do ângulo do Pallet. Mas, caso isso não dê resultado, alguém pode me dizer em que tipos de circunstâncias uma concha se recusaria a executar um processo em segundo plano, caso isso nos dê uma pista para uma solução alternativa?

Estamos usando o CentOS 6.5 de 64 bits, mas espero que isso não seja relevante.

    
por Jon Woods 27.05.2014 / 15:37

1 resposta

2

Tente:

touch b & disown

Talvez os processos filhos sejam mortos por um sinal porque o processo pai é encerrado. Use help disown para ver o que acontece.

Existe o programa nohup separado, que faz o mesmo, mas isso funciona em qualquer shell:

nohup touch b
    
por 27.05.2014 / 15:51