# Batch in linux

## patrick666

Ho il seguente problema ......

Ho la necessità di lanciare una spece di bath che mi avvi due programmi.

Ho creato un file avvio.sh e gli ho dato diritti di lettura e scrittura.

Al suo interno cerco di avviare due programmi, in questo modo:

```

/usr/progs/prog1

/usr/progs/prog2

```

La cosa strana è che lo script viene eseguito e il prog1 viene lanciato, mentre il prog2 rimane nel dimenticatoio.

Perchè avviene questo?

C'è un metodo diverso per fare quello che ho tentato?

Grazie anticipatamente.

----------

## lucapost

```

/usr/progs/prog1 &

/usr/progs/prog2 &

```

prova così.

----------

## randomaze

 *patrick666 wrote:*   

> La cosa strana è che lo script viene eseguito e il prog1 viene lanciato, mentre il prog2 rimane nel dimenticatoio.
> 
> Perchè avviene questo?

 

per quello che hai scritto prog2 dovrebbe partire al termine di prog1 (se hai bisogno che siano entrambi attivi devi lanciare prog1 in background...).

----------

## riverdragon

In linux (bash) una riga viene interpretata e il comando eseguito quando il comando alla riga precedente ha terminato l'esecuzione, a meno di specificare diversamente (il carattere &); in windows succede il contrario.

----------

## patrick666

Lanciando lo script come da voi consigliato manualmente, funziona correttamente,

Invece, lanciandolo automaticamente con wicd manager non funziona.

Ho anche provato lo script seguente che risulta essere eseguito parzialmente:

```

mkdir /home/UTENTE/aaa

/usr/progs/prog1 & 

mkdir /home/UTENTE/bbb

/usr/progs/prog2 & 

```

Mi spiego meglio: le due cartelle con l' mkdir vengono create, mentre gli eseguibili non vengono affatto lanciati!

Ho inoltre controllato con:

```

# ps -A | grep prog1

# ps -A | grep prog2

```

Non ho trovato nessun processo interassati.

----------

## djinnZ

meglio (mkdir vattelappesca ; comando) & o usare un blocco...

----------

## asad06

 *Quote:*   

> meglio (mkdir vattelappesca ; comando) & o usare un blocco...

 

Scusate sono nuovissimo di questo mondo e anche io ho lo stesso identico problema,

per riprendere l'esempio postato da patrick666, modificandolo come da ultimo post, ho provato con:

```

#! /bin/sh

(mkdir /home/UTENTE/aaa ; /usr/progs/prog1 ) &

mkdir /home/UTENTE/bbb
```

Ma continua a non funzionarmi, o meglio, vengono create la prima e la seconda cartella ma il programma non viene avviato.

Ho capito male la risposta?

PS: Per me  /usr/progs/prog1 corrisponde a /usr/bin/skype, non so se può essere utile....

----------

## djinnZ

#!/bin/sh e #!/bin/bash non sono la stessa cosa così come (comando ; comando) e {comando ; comando} (il famoso "blocco"), così come . /vattelappesca/script è diverso da /vatellapesca/script con script eseguibile.

Spiegate esattamente quello che volete fare perchè la sfera di cristallo è rotta e comunque il ricorso ad essa fa perder tempo.

Non ho voglia di andarmi a vedere cosa fa wicd manager ma è sicuro che esegue uno script bourne? O ci sono limitazioni come per ppp?

per esempio avere un { . script } dove script contiene a sua volta un {qualcosa} non va.

----------

## asad06

patrick sono riuscito a capire qual'è il problema, non è un problema dello script ma del wicd che parte prima di X. Infatti se fai un ps -A ti puoi notare che il numero di pid di wicd è minore di X quindi non riesce a lanciare i programmi con interfaccia grafica (nel mio caso skype) 

Se vuoi puoi provare a killare il processo wicd e a rilanciarlo. Appena rilanciato wicd verranno avviati tutti i programmi del tuo script e verranno create le cartelle aaa e bbb.

Ho chiesto info allo sviluppatore e mi ha detto che potrebbe risolvere con le prossime versioni.

Saluti

----------

## randomaze

 *asad06 wrote:*   

> patrick sono riuscito a capire qual'è il problema, non è un problema dello script ma del wicd che parte prima di X. Infatti se fai un ps -A ti puoi notare che il numero di pid di wicd è minore di X quindi non riesce a lanciare i programmi con interfaccia grafica (nel mio caso skype) 
> 
> Se vuoi puoi provare a killare il processo wicd e a rilanciarlo. Appena rilanciato wicd verranno avviati tutti i programmi del tuo script e verranno create le cartelle aaa e bbb.
> 
> Ho chiesto info allo sviluppatore e mi ha detto che potrebbe risolvere con le prossime versioni.
> ...

 

Ricapitolando il problema non è "batch in linux" (come da titolo) ma "avvio automatico di programmi con wicd"  :Question: 

Perchè nel caso sarebbe opprtuno rinominare il topic.

wicd come viene avviato? Come servizio della macchina oppure in seguito? Perchè nel secondo caso si dovrebbe poter spostare nei files di avvio automatico (credo che ormai tutti i window manager riescano a gestirli... altrimenti c'è sempre l'.xinitrc)

----------

## aleph.no-ip.biz

bè, puoi facilmente aggiungere un delay  :Wink:  . . per non bloccare l'avvio di wicd puoi usare questo codice 

```
/usr/bin/nohup /bin/bash -c '( sleep 3; /usr/bin/nohup /usr/bin/programma1 & /usr/bin/nohup /usr/bin/programma2 & )' &
```

 ( forse ho esagerato coi nohup   :Rolling Eyes:  servono per far si che il programma non termini alla chiusura della shell che l'ha lanciato  :Wink:  ) ..  cambi 3 col tempo da aspettare e programma[12] con i programmi da lanciare  :Wink: 

----------

