Pagina 1 di 1
[risolto]script in background
Inviato: sab 18 lug 2009, 15:17
da osser
mi scuso per la domanda da niubbo ma vorrei eseguire
lo script che ho chiamato men.sh in background
Codice: Seleziona tutto
#!/bin/bash
# men.sh
mencoder file_uno
mencoder file_due
mencoder file_tre
Re: script in background
Inviato: sab 18 lug 2009, 15:27
da Mario Vanoni
osser ha scritto:mi scuso per la domanda da niubbo ma vorrei eseguire
lo script che ho chiamato men.sh in background
Codice: Seleziona tutto
#!/bin/bash
# men.sh
mencoder file_uno
mencoder file_due
mencoder file_tre
Specifica meglio:
- non-stop finche' e` accesa la macchina (mem.sh &)
- ad intervalli regolari [usando crontab(1)]
Re: script in background
Inviato: sab 18 lug 2009, 15:37
da osser
Grazie Mario per la risposta pronta, allora vorrei
non-stop finche' e` accesa la macchina.
Ho aperto una console ed eseguito quello che mi ha suggerito:
bash-3.1$ mem.sh &
ma resta interattivo cioè la console è impegnata.
Re: script in background
Inviato: sab 18 lug 2009, 15:58
da d4z_c0nf
osser ha scritto:Grazie Mario per la risposta pronta, allora vorrei
non-stop finche' e` accesa la macchina.
Ho aperto una console ed eseguito quello che mi ha suggerito:
bash-3.1$ mem.sh &
ma resta interattivo cioè la console è impegnata.
E' impegnata nel senso che è impegnato lo standard output, il tuo script scrive qualcosa sullo standard output e quindi viene visualizzato, in ogni caso tu puoi usarla, ad esempio puoi uscirne senza interrompere lo script con
Oppure puoi lanciare lo script, se non ti interessa vedere l'output del tuo script, redirezionando l'output verso /dev/null o verso un file, vedi tu..
rock
Re: script in background
Inviato: sab 18 lug 2009, 16:01
da Mario Vanoni
osser ha scritto:Grazie Mario per la risposta pronta, allora vorrei
non-stop finche' e` accesa la macchina.
Ho aperto una console ed eseguito quello che mi ha suggerito:
bash-3.1$ mem.sh &
ma resta interattivo cioè la console è impegnata.
Problema che mandi info su stdout e/o stderr.
Se mem.sh e` taciturno funziona.
Prova top &
con
fg
torna visibile e lo chiudi.
Re: [risolto]script in background
Inviato: sab 18 lug 2009, 16:21
da osser
E' impegnata nel senso che è impegnato lo standard output, il tuo script scrive qualcosa sullo standard output e quindi viene visualizzato, in ogni caso tu puoi usarla, ad esempio puoi uscirne senza interrompere lo script con
Avevo un po' paura a scrivere exit e a dare invio senza leggere nulla ma con:
exit
ho risolto, grazie anche a d4z_c0nf
Re: [risolto]script in background
Inviato: sab 18 lug 2009, 16:28
da conraid
oppure usa screen
Re: [risolto]script in background
Inviato: sab 18 lug 2009, 18:25
da Mario Vanoni
osser ha scritto:E' impegnata nel senso che è impegnato lo standard output, il tuo script scrive qualcosa sullo standard output e quindi viene visualizzato, in ogni caso tu puoi usarla, ad esempio puoi uscirne senza interrompere lo script con
Avevo un po' paura a scrivere exit e a dare invio senza leggere nulla ma con:
exit
ho risolto, grazie anche a d4z_c0nf
Hai veramente risolto?
top &
exit
e top e` morto.
Avevo capito che
men.sh
doveva girare fino al powerdown.
Se scrive i risultati anche su un file
men.sh > /dev/null 2>&1 &
se scrive solo su stdout, e vuoi tenere i risultati
men.sh >> /path/file 2>&1 &
Re: [risolto]script in background
Inviato: sab 18 lug 2009, 19:34
da d4z_c0nf
Mario Vanoni ha scritto:osser ha scritto:E' impegnata nel senso che è impegnato lo standard output, il tuo script scrive qualcosa sullo standard output e quindi viene visualizzato, in ogni caso tu puoi usarla, ad esempio puoi uscirne senza interrompere lo script con
Avevo un po' paura a scrivere exit e a dare invio senza leggere nulla ma con:
exit
ho risolto, grazie anche a d4z_c0nf
Hai veramente risolto?
top &
exit
e top e` morto.
Hai ragione Mario, se usi quella cosa con top, top muore.
Provando invece con uno script tipo:
Codice: Seleziona tutto
i=0
while (( i < 100000000 )); do
echo "pippo"
i=$((i+1))
done
Continua..
Strano comportamento di top, deve esserci qualche motivo "interno".
rock
Re: [risolto]script in background
Inviato: sab 18 lug 2009, 19:37
da targzeta
Per non killare i processi con l'exit normalmente basta il comando nohup(1)
Emanuele
Re: [risolto]script in background
Inviato: sab 18 lug 2009, 20:18
da davide77
spina ha scritto:Per non killare i processi con l'exit normalmente basta il comando nohup(1)
Giusto per dovere di cronaca: se lanci un comando in background rimane figlio della shell che lo ha lanciato e viene interrotto quando la shell viene chiusa (manda un segnale di HUP ai processi figli), se lo lanci preceduto dal comando nohup il segnale di chiusura viene "bypassato", lasciando il processo attivo nonostante il padre sia stato chiuso.

Re: [risolto]script in background
Inviato: lun 20 lug 2009, 11:04
da joe
Anche io mi sono fatto degli script "demoniaci" che se ne stanno dietro le quinte e il problema era proprio quello di lanciarli e chiudere la shell senza che questi morissero (in quanto figli della shell stessa). Fortunatamente la bash mette a disposizione il comando "disown" che trancia questa gerarchia.
perticamente lanci:
pippo.sh 2>/path/to/logfile 1>/path/to/outputfile & disown %1
Questo vale se pippo.sh è il "primo" job in background per quella shell. In questo modo e facile mandare tutto in background e staccare la shell dal processo. Sinceramente non so se poi in uqlalche modo sia possibile riagganciare il processo ad una shell e riportarlo in foreground...un poì come si fa con "screen -r".
Però sinceramente a me non è mai servito perche si trattava proprio di script pensati per starsente in bg....però se ci fosse qualche possibilità di farlo e ne foste a conoscenza, non mi dispiacerebbe sapere come si fà.
Io normalmente utilizzo screen per gestire una sessione di lavoro con diverse shell:
screen -S nomesessione
"ctrl-a + c" per creare una nuova shell...
ctrl-a + d per staccare tutta la sessione dal terminale da cui si è lanciata (va tutto in background e si può anche adirittura eseguire il logout.
Poi si può ritornare su un terminale qualsiasi (sia da X che da sessione testuale) e riagganciare la sessione screen:
screen -r nomesessione
Il "nomesessione" non è sempre necessario, ma può essere utile se si hanno in piedi più sessioni screen contemporaneamente.