creazione di uno script che viene eseguito all'avvio

ciao a tutti.
credo sia una domanda molto semplice,ma non trovo la risposta.
ho creato un file testo.sh con all’interno il comando

mount -t cifs -o username=user,password=password,domain=workgroup //192.168.0.24/cartella /mnt/condivisa/

poi ho messo la spunta alla voce
consentire l’esecuzione del file come programma in -permessi- e l’ho messo nella cartella /etc/init.d .
eseguendolo con ./ mi monta la cartella,ma all’avvio no . qualcuno sa dirmi cosa manca?
grazie a tutti

Come mai l’hai posizionato in /etc/init.d?
Prova ad aggiungere in:
Sistema->Preferenze->Applicazioni d’avvio
Clicca aggiungi e poi:
In nome: quel che vuoi
In comando: ./etc/init.d/testo.sh
In commento: quel che vuoi

Riavvia e guarda se viene avviato.
Nota che testo.sh non si deve trovare necessariamente in /etc/init.d
è sufficiente specificare in “comando” il giusto percorso al file

il suggerimento che ha dato il buon Straight è ottimo se lo script può essere eseguito da utente.

in questo caso essendo un mount deve essere dato da root ed il comando di lancio al boot va messo necessariamente in: /etc/rc.d/rc.local

Mannaggia:-) prendo appunti! grazie virus!

Comunque nel caso particolare di quel comando (mount) ti conviene mettere una voce nel file fstab e farlo montare direttamente al sistema, che si occuperà anche dello smontaggio allo shutdown.

l’fstab è stato il mio primo tentativo,ma accedendo alla rete con la scheda wireless succederebbe che prima monterebbe le partizioni,poi si connetterebbe alla rete non trovandola mai. avevo messo il file in /etc/init.d perché così facevo con ubuntu ,solo che dopo davo un comando
update-rc.d nomescript.sh defaults
che con fedora non funziona.
mettendo il comando in /etc/rc.d/rc.local con si monta credo per la stessa ragione dell’fstab.
con ubuntu per ovviare al problema avevo messo prima
sleep 30
,ma mettendolo in rc.local mi si rallenta tutto prima di montare cioè aspetta il tempo prima del login e di conettersi alla rete …

con fedora si usa chkconfig al posto di update-rc.d

ma se vuoi mettere lo script in init.d ti conviene usasre la strutturas standard dei file init.d ( start|stop|reload …) in modo da avere la gestione completa, guarda qui: http://www.linux.com/archive/feed/46892 , creare la struttura è abbastanza semplice.

Poi ci sarebbe anche un’ altra alternativa, usare gli script if-up della tua interfaccia , in modo che quando la connessione diventa attiva ti esegue lo script di montaggio.
Fanne anche uno di smontaggio, perché se perdi la connessione e ti riconnetti ti viene montato più volte, così con if-down quando cade la connessione lo smonta

credevo che connettere una cartella di rete all’avvio fosse più semplice comunque …

ho usato chkconfig che ha dato restituito
chkconfig defaults condivisadirete.sh
chkconfig versione 1.3.48 - Copyright © 1997-2000 Red Hat, Inc.
Questo software è liberamente distribuibile secondo i termini della GNU Public License.

uso:···chkconfig·–list]·–type·]·[nome]
chkconfig --add
chkconfig --del
chkconfig --override
·········chkconfig·–level·]·–type·]··<on|off|reset|resema

e ancora il mio script non funziona all’avvio ,ma funziona se lo lancio con ./

al link c’è quest’esempio
#!/bin/bash

/etc/rc.d/init.d/

Source function library.

. /etc/init.d/functions

start() {
echo -n "Starting : "

    touch /var/lock/subsys/
    return

}

stop() {
echo -n "Shutting down : "

    rm -f /var/lock/subsys/
    return

}

case “$1” in
start)
start
;;
stop)
stop
;;
status)

    ;;
restart)
    stop
    start
    ;;
reload)

tart)

     -f /var/lock/subsys/ ] && restart || :
probe)

    ;;
*)
    echo "Usage:  {start|stop|status|reload|restart|probe]"
    exit 1
    ;;

esac
exit $?

io non sono un programmatore,ma mi sembra di capire che ci siano 2 funzioni definite dall’utente (start e stop) e che

  1. venga fatto partire lo script che restituisce un numero nel caso in cui questo numero sia 1 venga chiamata la funzione start ecc…

riguardo ifup mi sembra un’ottima idea,ma non ho capito come funziona. io farei così ,ma non prendetemi in giro perché sono alle prime armi …

#!/bin/bash
condivisione () {
mount -t cifs -o username=carlo,password=password,domain=workgroup //192.168.0.24/cartella /mnt/condivisa/
}

ifup wlan0 condivisione ;
else
sleep 180
restart)

pensavo che sarebbe utile per capire se parte lo script che s’aprisse un popup / finestrina con scritto qualcosa del tipo -ora provo a montare la cartella- . si può inserire facilmente all’interno dello script?

ci fai vedere:

# chkconfig|grep work

certo

NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:off 3:off 4:off 5:off 6:off

cos’è?

nello script del link devi solo modificare le funzioni start() e stop()

start() {
echo -n "Starting : "

mount ..bla...bla..bla

return
}

stop() {
echo -n "Shutting down : "

umount ...bla...bla...bla

return
}

poi prova con chkconfig mioscript.sh on

per quanto riguarda if-up e if-down non si usano come hai descritto tu, se trovo un po’ di documentazione te la posto. Ciao

1)mi piacerebbe molto imparare a far bene gli script…
una volta definite le funzioni start e stop come le chiamo ?
come gli dico : ora esegui start?

2)con
echo -n "Starting : "
viene scritto "Starting : " nella shell,ma non vedo in effetti se si esegue in automatico lo script. come posso far uscire un popup o qualcosa del genere?

3)la risposta a
chkconfig mioscript.sh on
Il servizio condivisadirete.sh non supporta chkconfig

grazie ancora

per me lo script non funziona in rc.local perché i servizi network sono ancora a terra quando viene lanciato.

si,è giusto,in effetti negli script ho messo
sleep 180 prima del mount sperando che aspetti 180 secondi prima di eseguire quello che vien dopo,ma magari me lo confermerete voi.
Comunque se c’è un altro posto dove mettere lo script in modo che venga eseguito dopo il login mi sembra più giusto…

[quote=sevy72]
nello script del link devi solo modificare le funzioni start() e stop()

start() {
echo -n "Starting : "

mount ..bla...bla..bla

return
}

stop() {
echo -n "Shutting down : "

umount ...bla...bla...bla

return
}

scusate,ma qui sopra è definito cosa fanno le funzioni start() e stop() ,ma come si eseguono?

grazie…

[quote=xyznet]
1)mi piacerebbe molto imparare a far bene gli script…
una volta definite le funzioni start e stop come le chiamo ?
come gli dico : ora esegui start?

2)con
echo -n "Starting : "
viene scritto "Starting : " nella shell,ma non vedo in effetti se si esegue in automatico lo script. come posso far uscire un popup o qualcosa del genere?

3)la risposta a
chkconfig mioscript.sh on
Il servizio condivisadirete.sh non supporta chkconfig

grazie ancora [/quote]

Allora, gli script che trovi in init.d sono script di sistema automatizzati. Le funzioni stop e start vengono chiamate da sistema quando inserisci lo script con chkconfig, puoi anche chiamarle direttamente con:

/etc/init.d/mioscript.sh start

o con

/etc/init.d/mioscript.sh stop

Se vuoi che all’ avvio sia il sistema a chiamare lo script devi inserirlo con chkconfig. Per rederlo compatibile con chkconfig devi solo inserire un commento all’ inizio dello script in questo modo:

#!/bin/sh
#
# questo script è bellissimo ...bla..bla...bla...
# le due righe sotto sono per chkconfig
#
# chconfig: - 20 20
# description: Mio script

resto dellos script ...
........
........

i due numeri dopo chkconfig ( 20 20) indicano in che ordine rispetto agli altri deve essere eseguito lo script

scusate x i tempi,ma dipendono solo dal lavoro.
riassumendo creando lo script e “inserendolo” con

chkconfig nomescript.sh on

quello che c’è scritto in start viene eseguito all’avvio e quello che c’è scritto in stop viene eseguito allo spegnimento. è giusto?
io ho creato il mio scrito che si chiama condivisadirete3.sh
e con
chkconfig condivisadirete3.sh on
ottengo
Il servizio condivisadirete3.sh non supporta chkconfig
il contenuto è questo

#!/bin/sh

questo script è bellissimo …bla…bla…bla…

le due righe sotto sono per chkconfig

chconfig: - 20 20

description: Mio script

start() {
echo -n "Starting : "
sleep 180
mount -t cifs -o username=carlo,password=password,domain=workgroup //192.168.0.24/incoming /mnt/condivisacasa/

return
}

stop() {
echo -n "Shutting down : "

umount /mnt/condivisacasa/

return
}

invece con
condivisadirete3.sh start ottengo

bash: condivisadirete3.sh: command not found

scusa avevo sbagliato io, è chkconfig, non chconfig.

poi guarda il mio post n. #8 , al tuo script manca una parte, oltre le due funzioni ci deve essere anche il codice di richiamo in base ai parametri.

ora ho il bimbo e non posso scrivere, più tardi ti posto lo script completo. ciao

[quote=sevy72]

poi guarda il mio post n. #8 , al tuo script manca una parte, oltre le due funzioni ci deve essere anche il codice di richiamo in base ai parametri.

ora ho il bimbo e non posso scrivere, più tardi ti posto lo script completo. ciao[/quote]

quindi devo aggiungere

case “$1” in
start)
start
;;
stop)
stop
;;

?

aggiungendo queste modifiche chkconfig on non da errori,ma con ./script.sh esce

./condivisadirete3.sh: line 33: syntax error: unexpected end of file

ti ringrazio tanto servy , aspetto lo script completo