Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: ejencik 19. 08. 2021, 22:14:22
-
Zdravim
potreboval bych poradit s 'asynchronni' radkou ve skriptu.
Mam skript, ktery mi "zapne port - pocka - vypne port". Ale ta doba cekani muze byt volitelna az nekolik minut a ja potrebuju, aby skript hned dobehl a vratil mi nejake navratove hodnoty.
#!/bin/sh
VALUE=60
DEVICE=12
IP=192.168.111.90
#tato radka by mela bezet nezavisle na behu skriptu
(curl --silent $IP/?switchOn%$DEVICE ; sleep $VALUE ; curl --silent $IP/?switchOff%$DEVICE ) &
STATUS=`curl --silent $IP/?get `;
echo "$STATUS";
Zkousel jsem syntaxi (.....) & ale stejne skript ceka, az ta radka probehne.
Diky za radu.
-
https://stackoverflow.com/questions/2368137/asynchronous-shell-commands
-
Mně to nečeká.
$ cat bgtest.sh
#!/bin/sh
echo start
(date; sleep 2; date) &
echo end
$ ./bgtest.sh
start
end
$ Pá srp 20 08:44:55 CEST 2021
Pá srp 20 08:44:57 CEST 2021
-
Predne se musim omluvit - pri pokladani dotazu jsem neuvedl, ze se jedna o CGI skript volany pres Apache.
Proto nemohu pouzit "$ myscript &" podle stackoverflow.
Zkousel jsem 'bgtest.sh' a funguje mi take spravne z prikazove radky, ale pokud podobny kod pouziju do CGI skriptu, tak webova stranka vrati vysledek az po ukonceni prikazu sleep 10
start
end
Fri Aug 20 15:44:18 CEST 2021
Fri Aug 20 15:44:28 CEST 2021
Stejne tak skript ceka i na dokonceni jednoho prikazu bez zavorek, takze pokud tam vlozim 'sleep 20 &' tak webova stranka se obnovi az po 20 vterinach.(nezalezi zda je vykonavan jeden nebo vice prikazu)
Diky za napad nebo komentar.
-
Zkus v tom skriptu spustit "screen -d -m /muj/skript/na/pozadi.sh". Ale jinak obecně jsou to nějaké ty věci ohledně process groups a asi by bylo lepší napsat démona co poběží nezávisle a CGI ho jenom ovládat (volat z CGI "echo zapni | nc 127.0.0.1 1234").
-
Já bych tipnul, že to čte výstup toho skriptu dokud se stdin/out nezavře a jak podprocesy ty deskriptory dědí, tak se zavřou až když všechny procesy skončí. Takže bych zkusil toto:
prikaz </dev/null &>/dev/null &
-
Než použít screen, je lepší použít nohup
Zkus v tom skriptu spustit "screen -d -m /muj/skript/na/pozadi.sh". Ale jinak obecně jsou to nějaké ty věci ohledně process groups a asi by bylo lepší napsat démona co poběží nezávisle a CGI ho jenom ovládat (volat z CGI "echo zapni | nc 127.0.0.1 1234").
-
"screen -d -m /muj/skript/na/pozadi.sh" funguje presne podle potreby!!!!
Zkousel jsem i 'nohup' ale bez vysledku.
Diky moc za pomoc.