2012-10-16 17 views
11

ho tre script di shell che sto facendo funzionare come sotto-Eseguire tre script di shell contemporaneamente

sh -x script1.sh 

sh -x script2.sh 

sh -x script3.sh 

Così ogni script viene eseguito in sequenza uno alla volta, dopo quella precedente terminato l'esecuzione.

problema dichiarazione: -

C'è un modo per eseguire tutte le tre script di cui sopra allo stesso tempo da una singola finestra? Voglio solo eseguire script1, script2, script3 allo stesso tempo. Se si pensa ad una pianificazione CRON JOB script1 at 3 AM, script2 at 3AM, script3 at 3AM (tutti e tre gli script contemporaneamente, contemporaneamente). Questo è quello di cui ho bisogno, ho bisogno di eseguire tutti e tre gli script contemporaneamente.

+0

Controlla la mia risposta all'indirizzo: http://stackoverflow.com/a/33106658/2032852 Ho condiviso una soluzione con lo stesso problema con uno script che consente di eseguire qualsiasi numero di programmi, reindirizzare i loro output in un registro separato file e attendere che finiscano. – Joaopcribeiro

risposta

22

vuoi questo?

$ sh -x script1.sh & sh -x script2.sh & sh -x script3.sh & 

Aggiornamento spiegazione:

  • eseguire ogni script in modalità background in modo che il comando successivo viene eseguito senza attendere comando corrente per il completamento.
  • '&' rende gli script eseguiti in background in modo che pronta non aspetta che sia completato
  • '&' anche può essere usato per i comandi a catena su una linea simile a l'esecuzione di comandi uno per uno sulla linea di comando.
+0

Puoi spiegare cosa farà? Dato che non ho molta familiarità con le cose Unix. – ferhan

+0

Rohan - ci sono un paio di errori lì. Il messaggio di errore apparirà come 'bash: errore di sintassi vicino a un token imprevisto;'. Dovresti rimuovere entrambi i punti e virgola. & è un separatore di comandi valido da solo. Ad esempio, prova a echo a &; echo b &; echo c & 'vs' echo a & echo b & echo c & ' –

+0

@ jwpat7, buon punto ha aggiornato la risposta, grazie. – Rohan

3

Non sei sicuro di ciò che stai cercando di realizzare ma puoi creare uno script che li chiama 3 o inviarli allo sfondo aggiungendo un "&" alla fine.

sh -x script1.sh & 
sh -x script2.sh & 
sh -x script3.sh & 
+3

E puoi usare "aspetta" per aspettare che tutti e tre finiscano. –

+0

Grazie funziona. Ma supponiamo che se ho bisogno di uccidere questa attività mentre è in esecuzione in background, come posso farlo? – ferhan

+1

quando lo si esegue con "&" restituisce un ID di processo. run kill Baconator507

4

Il & permette un processo per l'esecuzione in background.

sh -x script1.sh & 
sh -x script2.sh & 
sh -x script3.sh & 
+0

Grazie funziona. Ma supponiamo che se ho bisogno di uccidere questa attività mentre è in esecuzione in background, come posso farlo? – ferhan

+0

@ user1419563 È possibile cercare il 'PID' (ID processo). Di solito quello che faccio è digitare 'ps -ef | grep sh' per trovare tutti gli script di shell in esecuzione. Da lì puoi digitare 'kill PID', che non è elegante ma funziona. – squiguy

5

con GNU parallelo si può fare:

parallel sh -x ::: script1.sh script2.sh script3.sh 

Se gli script sono eseguibili, allora si può anche fare:

parallel ::: script1.sh script2.sh script3.sh 

Guarda i video introduttivi per saperne di più: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

10 secondi installazione:

wget -O - pi.dk/3 | bash