Executando vários scripts em segundo plano e retornando imediatamente

0

Eu tenho essa configuração bash configurada para ser executada em conjunto com um gerenciador de Wifi, que fornece eventos como HOTSPOT, CONNECTING, CONNECTED

Eu quero executar scripts com base em eventos e retornar imediatamente, não esperar que os scripts sejam concluídos, porque o gerenciador de Wifi pausaria temporariamente até que os scripts fossem executados.

#!/bin/bash

Logfile="/home/arjun/Desktop/bash/logfile.txt"

echo "Started" >> $Logfile

if [ "$1" == "CONNECTING" ]; then
    echo "args CONNECTING" >> $Logfile

elif [ "$1" == "HOTSPOT" ]; then
    echo "args HOTSPOT" >> $Logfile
    kill $(< my_sinatra_server.pid)

elif [ "$1" == "CONNECTED" ]; then
    echo "args CONNECTED" >> $Logfile   

    nohup ~/Desktop/ruby/sinatra/api/api.rb >> /log/file 2>&1 &
    echo $! > my_sinatra_server.pid
    echo "PID is $(< my_sinatra_server.pid)"

else
    echo "Invalid args" >> $Logfile
fi

echo "bye:-)" >> $Logfile

O que eu tenho é executado corretamente, mas eu também tenho outros scripts para serem executados, e Python e um script Nodejs.

Como posso adicioná-los também? É semelhante a nohup para Ruby? Adicione uma nova linha de nohup depois disso para cada script? Aqueles introduzirão algum atraso na entrega do controle?

E se eu quiser delegar isso para outro arquivo bash executável, será um caso simples de copiar todos os comandos nohup para o novo arquivo bash e retornar o controle para o gerenciador de Wifi imediatamente? Isso será muito melhor? Como posso fazer isso então?

    
por arjun 06.08.2018 / 14:36

1 resposta

0

Is it similar to nohup for Ruby? Add a new line of nohup after that for each script? Will those introduce any delay in handing back control?

O padrão que você estabeleceu com o nohup seguido pelo seu comando em segundo plano & e o log do PID $! em um arquivo é o padrão típico que você verá usado para esse tipo de trabalho. / p>

Continue simplesmente usando esse padrão e plano de fundo de todos os processos que deseja iniciar dessa maneira e registre seus PIDs nos arquivos.

And if I want to delegate this to another executable bash file, will it be a simple case of copying all those nohup commands to the new bash file and return control to the Wifi manager immediately? Will this be much better? How can I do this then?

Sim, você pode mover todos esses comandos para outro script e simplesmente chamá-los por meio de uma única chamada. Se isso é melhor / pior é difícil dizer, é inteiramente até o que você está tentando realizar e como você deseja gerenciar essas coisas.

Em termos de como fazer isso, parece que você já sabe o que fazer. Coloque tudo em um script e chame-o do aplicativo gerenciador de Wi-Fi.

Você pode precisar passar alguns argumentos para esse script. Para isso, você pode simplesmente usar a chamada para esse script da seguinte forma:

my_sub_cmd.bash $arg1 $arg2

E então dentro desse comando você põe os argumentos da linha de comando via $1 , $2 , etc.

    
por 07.08.2018 / 03:07