Pagina 1 di 1

rc.local eseguito a metà

Inviato: gio 7 dic 2006, 17:23
da Dani
Guardate un pò qui :shock: :

Codice: Seleziona tutto

root[rc.d]# cat rc.local
# Start Dbus

if [ -x /etc/rc.d/rc.messagebus ]; then
  . /etc/rc.d/rc.messagebus start
fi

# Start Hal

if [ -x /etc/rc.d/rc.hal ]; then
  . /etc/rc.d/rc.hal start
fi


root[rc.d]# ./rc.local
Starting system message bus
root[rc.d]# ./rc.hal start
Starting HAL daemon:  /usr/sbin/hald
Come è possibile che rc.hal, nonostante abbia i permessi di esecuzione, non venga eseguito ?

Inviato: gio 7 dic 2006, 18:51
da targzeta
Infatti non è possibile :D
Dopo aver scartato tutte le possibiltà mistiche, quella che resta è l'unica logica ;)

Prova a togliere i punti davanti alle invocazioni. Che senso ha controllare se sono eseguibili se puoi li esegui nella shell corrente?

In pratica prova a modificare le righe:

Codice: Seleziona tutto

. /etc/rc.d/rc.messagebus start
. /etc/rc.d/rc.hal start
con:

Codice: Seleziona tutto

/etc/rc.d/rc.hal start
/etc/rc.d/rc.hal start
nota l'assenza del punto iniziale.

Se funziona fammi sapere che poi ti spiego meglio
Spina

Inviato: gio 7 dic 2006, 18:56
da bruno82
Secondo me alla fine di /etc/rc.d/rc.messagebus c'è un bellissimo exit che blocca tutto :roll:

Inviato: gio 7 dic 2006, 19:09
da gohanz
Non è che devi cancellare il pid file in /var/run/dbus?


Il mio rc.local

Codice: Seleziona tutto

#!/bin/sh

if [ -x /etc/rc.d/rc.messagebus ]; then
	if [ -w /var/run/dbus/dbus.pid ]; then
		rm /var/run/dbus/dbus.pid
	fi
	sh /etc/rc.d/rc.messagebus start
fi

#hal
# To disable hal, chmod rc.hal to 644
if [ -x /etc/rc.d/rc.hald ]; then
	sh /etc/rc.d/rc.hald start
fi

Inviato: gio 7 dic 2006, 19:18
da Dani
Si, senza il punto funziona.
Ho sempre creduto che ./path/programma fosse la stessa cosa di /path/programma.

Perchè ora funziona ? :?:

Inviato: gio 7 dic 2006, 23:22
da targzeta
Dani ha scritto:Ho sempre creduto che ./path/programma fosse la stessa cosa di /path/programma
Ed infatti è la stessa cosa. Quello che ti è sfuggito è lo spazio che c'era tra il punto e il path.

Codice: Seleziona tutto

./programma
è diverso da

Codice: Seleziona tutto

. /programma
nota lo spazio ;)

Quando esegui

Codice: Seleziona tutto

. /programma
è come fare un

Codice: Seleziona tutto

source /programma
e questo fa si che la shell corrente esegue direttamente il programma senza fare una fork. Non so se hai presente quello che significa. Quando lanci un programma la shell crea un processo figlio che ha il compito di eseguire programma. Quando esegui un

Codice: Seleziona tutto

source programma
è la shell stessa che esegue il programma, nel senso che la shell stessa diventa il tuo programma. Quindi, quando il programma finisce la shell stessa finisce.

Se capisci quello che ti dico ora, non ti capiterà più un errore simile 8) (faccio il guappo ;) ).

Questo vuol dire che la tua shell, che doveva eseguire:

Codice: Seleziona tutto

/etc/rc.d/rc.messagebus start
/etc/rc.d/rc.hald start
quando esegue:

Codice: Seleziona tutto

. /etc/rc.d/rc.messagebus start
diventa lo script rc.messagebus (o meglio diventa la shell che esegue quello script). Ragion per cui succedono due cose:
  • 1) Tutto ciò che segue nel file rc.local dopo ". /etc/rc.d/rc.messagebus start" non viene eseguito.
    2) Quando finisce il processo rc.messagebus finisce anche la tua shell.
Fai questa prova. Scrivi in un file, ad esempio prova.tmp quanto segue:

Codice: Seleziona tutto

#!/bin/sh
echo ciao;
dai i diritti di esecuzione a prova.tmp. Ora apri un xterm ed esegui:

Codice: Seleziona tutto

prova.tmp
Poi invece prova ad eseguire:

Codice: Seleziona tutto

source prova.tmp
.

Spero di essere stato chiaro
Spina

P.S. Tanto lo so che sapevi già tutto e che la tua era una semplice svista ;)

Inviato: ven 8 dic 2006, 1:11
da Dani
Tutto chiaro, grazie.
spina ha scritto: P.S. Tanto lo so che sapevi già tutto e che la tua era una semplice svista ;)
Immagine