Ottenere uno script da eseguire all'avvio, non all'accesso


11

Come posso ottenere uno script specifico da eseguire (preferibilmente non come superutente) ogni volta che la macchina si avvia, ma prima del login. Può essere l'ultima cosa da eseguire all'avvio. Per lo più voglio solo che lo script funzioni anche se nessun utente accede.


1
@bruce dai un'occhiata a questo -> askubuntu.com/questions/9382/…
hhlp

1
Puoi usare upstart o cron o probabilmente un sacco di altri metodi. Una cosa importante da sapere è anche il modo precoce che può funzionare. Ad esempio ha bisogno di un particolare filesystem da montare, ha bisogno di X per essere in esecuzione, ha bisogno di DBus, ha bisogno di rete o, più in generale: ha bisogno di risorse per essere presente?
JanC

@ JanC: Sì, in realtà, ha bisogno di quasi tutto ciò che hai chiesto (tranne X), motivo per cui mi piacerebbe che fosse l'ultima cosa da eseguire. Non c'è davvero alcun motivo per eseguirlo prima.
Malabarba,

@Hhlp: Fantastico, grazie. Ma quanto tempo verrà eseguito lo script se uso quel metodo? Come accennato in precedenza, è meglio se è una delle ultime cose (prima del login).
Malabarba,

Bene, il login non richiede il networking, a meno che tu non voglia accedere a un terminal server e / o non hai $ HOME su una condivisione di rete ... ;-)
JanC

Risposte:


8

Consiglierei di usare cron. Il valore temporale speciale di @rebootgenererà il tuo lavoro ad ogni riavvio come utente. Ad esempio, esegui crontab -ee usa:

@reboot /home/yourself/bin/some_script_to_run

Per maggiori dettagli sui formati orari speciali, vedere man 5 crontab


Grazie, sembra abbastanza facile. Questo non si basa su quale utente crea il cronjob giusto? Funziona alla fine del boot indipendentemente dagli accessi?
Malabarba,

Dipende assolutamente da chi ha creato il cronjob: verrà eseguito come quell'utente. Ma non dipende da loro per essere loggato.
Kees Cook,

Tieni presente che questo esegue lo script all'avvio del daemon cron, quindi è possibile che altri sistemi di cui potresti aver bisogno non siano ancora pronti.
PhoneixS,

4

Una possibilità è usare Upstart. Ciò consente di specificare quando si desidera eseguire lo script in termini di dipendenze, ad esempio "quando i filesystem sono montati e l'interfaccia di rete eth0è attiva e funzionante". Crea un file /etc/init/bruce_script.conf(devi creare il file come root) contenente qualcosa del genere:

description "Bruce's boot script"
start on filesystem and net-device-up IFACE=eth0
task
exec su -c '/home/bruce/script' bruce

Consultare la documentazione di avvio per ulteriori informazioni, in particolare la init(5)pagina di manuale per un elenco di ciò che è possibile inserire in quel file di configurazione.


Esiste un elenco di eventi di avvio che possono essere utilizzati?
lato sole

@Markus: non che io sappia. Gli eventi standard hanno una pagina di manuale nella sezione 7 (così dpkg -L upstart |grep /man7/), e puoi guardare gli eventi emessi e usati come trigger negli script esistenti in /etc/init.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.