Esecuzione di comandi in parallelo che non finiscono mai


0

Sto tentando di eseguire alcuni comandi che non finiscono mai. Questi comandi controllano una directory e aggiornano i file quando cambiano. L'idea è che ho bisogno di più cartelle controllate da strumenti diversi, in grado di eseguirle tutte da un singolo comando.

Per i normali comandi che ritornano come previsto, separando i comandi con un comando ;.

ls /;
cd /;
ls var;
cd var;
ls log;
cd log

Quando provo a mettere insieme i comandi non di ritorno (come tail -f <some_file>o coffee -c -w <some_coffeescript_folder>, verrà eseguito solo il primo comando.

C'è un modo per farlo in un solo comando? Ecco i comandi che sto cercando di collegare insieme:

coffee -c -m -w public/javascript/*.coffee; \
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/; \
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/;

Cosa intendi con "uno dopo l'altro" se il primo non finisce mai? Quando vuoi che inizi il secondo?
Henning Makholm,

@HenningMakholm Il primo non finirà. Voglio solo che corrano tutti. Suppongo che in sequenza non sia effettivamente vero qui, il parallelo sarebbe più preciso. Ho aggiornato la domanda.
AlbertEngelB,

Risposte:


1

Puoi eseguirli in background aggiungendo una e commerciale al comando:

coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &

Se si desidera visualizzare tutti i lavori attualmente in esecuzione in background, eseguire una:

jobs -l

Per riportare in primo piano un lavoro in background, usa fg (PID è facoltativo):

fg <PID>

Per inviare un lavoro in primo piano (che "blocca" la tua shell) in modalità background, usa Ctrl-Z / bg:

$ tail -f foobar.log # is "blocking" your shell
(hit Ctrl-Z)
$ bg

Immagino che i lavori siano legati alla tua shell e non si sbarreranno automaticamente. Ciò significa che se si è effettuato l'accesso tramite SSH e ci si disconnette, la shell riceve un SIGHUP, che verrà inviato anche ai lavori. Questo interromperà / uscirà dai tuoi comandi.

Se vuoi mantenere i lavori attivi e funzionanti anche dopo esserti disconnesso, potresti voler esaminare il "disown" incorporato di bash:

jobs               # fetch job ID in the squre brackets
disown -h %<JOBID> # disown job by using the job ID

Un'altra opzione è "nohup" (comando, non un bash incorporato) o si utilizza un multiplexer terminale come "schermo" o "tmux".


Santo ... Ottima risposta, grazie mille! In realtà sto impostando questi comandi in un Makefile orribilmente macellato, ma ci sono molte informazioni che non sapevo qui. Grazie mille per la tua risposta dettagliata!
AlbertEngelB,

a proposito se vuoi "guardare" una directory o un file, dai un'occhiata a inotify e alla riga di comando inotify-tools github.com/rvoicilas/inotify-tools/wiki
Dominique Barton,

1

Prova questo:

coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &

In realtà ci ho provato, ma ho avuto un extra ;dopo la e commerciale. Grazie!
AlbertEngelB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.