View Full Version : [Ubuntu 10.04 Server] Script avvio
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.
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
mettere un "&" dopo il comando ?
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:
ma "screen -dmS irc irssi" da terminale ti funziona?
ma "screen -dmS irc irssi" da terminale ti funziona?
Si certo
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
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?
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
Bene, già meglio.
Con
sudo -u nome_utente
il comando per avviare irssi va.
Lo script no.... :muro:
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
secondo me...
il problema viene quando un comando interagisce con un terminale (screen)
se eseguito dal sistrema: rc.local... a che terminale lo associa?
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...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.