PDA

View Full Version : [Ubuntu 10.04 Server] Script avvio


kwb
27-11-2012, 20:06
Ciao!

Come faccio a far partire un comando all'avvio del sistema?
Ho sul muletto Ubuntu 10.04 server ( quindi senza interfaccia grafica ), un solo utente.

Ho tentato di mettere i comandi da eseguire dentro /etc/rc.local ma zero fortuna. Da ricordare anche che ho provato a cambiare anche i permessi con un

sudo chmod u+x /etc/rc.local

Ma i comandi inseriti non paiono funzionare
rc.local, come scritto nei commenti del file, termina con exit 0.
Può essere perchè sto cercando di far partire uno script in python e una sessione di screen "ridotta ad icona" ( detached )?
Io ho scritto questo:

# ~/ lo uso per andare nella cartella della home dell'utente, visto che non so dove ci troviamo quando viene eseguito questo comando
#start e' un parametro richiesto dallo script
python ~/script.py start

#il paramatro -dmS esegue una nuova istanza di screen facendo partire irss e dandogli l'alias irc
screen -dmS irc irssi
exit 0


Cosa mi sfugge?

Gimli[2BV!2B]
27-11-2012, 23:52
rc.local dovrebbe essere eseguito da root, quindi direi che ~/script.py sia espanso in /root/script.py, che non credo sia il percorso corretto.

Metti il percorso assoluto del file, vedi output del comando:ls -la ~/script.pyeseguito dall'utente in questione.

kwb
28-11-2012, 12:52
Non va...
Mi pare così banale la risoluzione, eppure non funziona :muro:
Avevo provato tenendo nello script solo:

screen -dmS irc irssi

Ma nemmeno questo parte, infatti dando poi:

screen -list

Mi segnala che non c'è nessuno processo aperto.

EDIT: Ho visto ora che lo script ha permessi rw-r--r-- . Può essere per quello? Come è possibile che io riesca comunque ad avviarlo se do

python script.py

linux_goblin
28-11-2012, 15:52
la mia risposta potrebbe sembrare provocatoria ma non è questo il mio intento:
metti come script soltanto
"touch /prova.txt"
exit 0

questo comando crea un file vuoto nella root
così cominci a vedere se funziona rc.local

poi se va aggiungi uno a uno i tuoi comandi oppure fai un altro script in bash che li lancia e metti in rc.local di lanciare questo script

ciao,
Marco

sacarde
28-11-2012, 16:24
mettere un "&" dopo il comando ?

kwb
28-11-2012, 17:48
la mia risposta potrebbe sembrare provocatoria ma non è questo il mio intento:
metti come script soltanto
"touch /prova.txt"
exit 0

questo comando crea un file vuoto nella root
così cominci a vedere se funziona rc.local

poi se va aggiungi uno a uno i tuoi comandi oppure fai un altro script in bash che li lancia e metti in rc.local di lanciare questo script

ciao,
Marco
Questo va... Anche perchè il file ora appartiene all'utente root del gruppo root, quindi è chiaro che sia stato creato in fase d'avvio.
Ma poi, che senso ha fare uno script in bash se rc.local è lui stesso uno script in bash?

mettere un "&" dopo il comando ?
Bhe, ma lo script in python si esegue e poi si chiude, qualunque sia l'esito dell'output.
Invece il comando:

screen -dmS irc irssi

È fatto apposta per far partire il processo in background, quindi credo che la & sia superflua. :stordita:

sacarde
28-11-2012, 19:39
ma "screen -dmS irc irssi" da terminale ti funziona?

kwb
28-11-2012, 20:33
ma "screen -dmS irc irssi" da terminale ti funziona?

Si certo

sacarde
28-11-2012, 21:03
ma l'esecuzione fatta da terminale...

credo sia diversa da quella fatta da uno script lanciato dal sistema, in questo caso dall'ultima parte del boot

kwb
28-11-2012, 21:25
ma l'esecuzione fatta da terminale...

credo sia diversa da quella fatta da uno script lanciato dal sistema, in questo caso dall'ultima parte del boot
Uhm... Mi fido perchè non so bene come funzioni la cosa...
Non è che magari visto che il comando viene fatto partire da root, questo poi rimane invisibile all'utente normale?
Perchè io quando guardavo i processi aperti da screen davo il comando senza sudo ( come ho sempre fatto ).

Altrimenti, come si può fare?

carabas
29-11-2012, 07:23
Nello script proverei ad inserire i comandi con path completo.

Inoltre non dovresti lanciare screen tramite sudo -u nomeutente ?

linux_goblin
29-11-2012, 08:08
se devi lanciare un comando come se fossi un utente qualsiasi e non root suggerisco questa soluzione
su - nomeutente -c 'comando'

creare uno script bash separato secondo me ha senso perchè così puoi avere certezza dell'interprete bash utilizzato

fai un file di testo che inizia così

#!/bin/bash
nome del comando

ciao,
Marco

kwb
29-11-2012, 11:50
Bene, già meglio.
Con

sudo -u nome_utente
il comando per avviare irssi va.
Lo script no.... :muro:

sacarde
29-11-2012, 13:39
che ambiente grafico usi ?


prova a mettere il comando nel autorun, dovrebbe partire appena fai il login

linux_goblin
29-11-2012, 15:07
per sacarde

Ho sul muletto Ubuntu 10.04 server ( quindi senza interfaccia grafica ), un solo utente.


per lo script farei cosi:
in rc.local una riga con

su - nomeutente -c '/home/utente/script'

e poi /home/utente/script fatto così

#!/bin/bash
cd /cartellagiusta
python script.py > /home/utente/log &


così puoi vedere dal file /home/utente/log cosa restituisce lo script (un errore? nessun errore? file non presente - lo script non viene nemmeno lanciato)

poi una volta che va puoi togliere dal > in poi che serve solo a noi per avere più info sul problema

p.s. ovviamente lo script deve essere eseguibile dall'utente quindi chmod 755 script

sacarde
29-11-2012, 15:47
secondo me...

il problema viene quando un comando interagisce con un terminale (screen)

se eseguito dal sistrema: rc.local... a che terminale lo associa?

kwb
30-11-2012, 12:24
per lo script farei cosi:
in rc.local una riga con

su - nomeutente -c '/home/utente/script'

e poi /home/utente/script fatto così

#!/bin/bash
cd /cartellagiusta
python script.py > /home/utente/log &


così puoi vedere dal file /home/utente/log cosa restituisce lo script (un errore? nessun errore? file non presente - lo script non viene nemmeno lanciato)

poi una volta che va puoi togliere dal > in poi che serve solo a noi per avere più info sul problema

p.s. ovviamente lo script deve essere eseguibile dall'utente quindi chmod 755 script
Ok, allora diciamo che mi sono reso conto che c'era un casino mica da ridere..
In pratica avevo 2 script, chiamati uguale salvo la mancanza dell'estensione ( quello senza estensione era scritto in bash, l'altro - con l'estensione - in python ). E quello in bash faceva quello che mi avevi suggerito.

Ad ogni modo, ho rediretto l'output su un file di testo e mi dice che il demone non esiste, salvo poi suggerirmi di avviare un comando per installarlo.
Il comando non viene riconosciuto.
secondo me...

il problema viene quando un comando interagisce con un terminale (screen)

se eseguito dal sistrema: rc.local... a che terminale lo associa?
Ma screen funziona... :stordita:
Ho commentato anche la riga di screen ma non cambia niente...