Avevo uno script che abilita automaticamente il mio wifi senza usare networkmanager, ma non so come eseguire lo script come root mentre il sistema si sta avviando. Come faccio a eseguire automaticamente lo script durante l'avvio?
Avevo uno script che abilita automaticamente il mio wifi senza usare networkmanager, ma non so come eseguire lo script come root mentre il sistema si sta avviando. Come faccio a eseguire automaticamente lo script durante l'avvio?
Risposte:
Posizionare lo script che si desidera eseguire nella directory /etc/init.d e renderlo eseguibile.
chmod 755 myscript
Fatto ciò, creare un collegamento simbolico nella directory del livello di esecuzione che si desidera utilizzare, ad esempio se si desidera eseguire un programma nel runlevel grafico 2, il runlevel predefinito per Ubuntu, lo si inserirà nella /etc/rc2.d
directory. Non è possibile posizionarlo nella directory, è necessario indicare quando verrà eseguito indicando l'avvio con una "S" e l'ordine di esecuzione è importante. Posizionalo dopo tutto il resto della directory assegnandogli un numero più alto.
Se l'ultimo script da eseguire è rc.local
ed è denominato, S99rc.local
è necessario aggiungere lo script come S99myscript
.
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
Ogni /etc/rc*.d
directory compatibile con le versioni precedenti ha collegamenti simbolici alla /etc/init.d/
directory.
/etc/rc2.d
, invece di rc3.d
come indicato nell'esempio. Sembra che rc2.d
non sia solo il livello grafico della corsa.
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d
ti porterà in quale /etc/rc?.d
directory corrisponde al tuo runlevel predefinito.
rc.local
ed è denominato, S99rc.local
è necessario aggiungere lo script come S99myscript
.". Volevi dire: "Se l'ultimo script da eseguire è myscript
ed è chiamato S99myscript
allora devi aggiungere il tuo script come S99myscript
." ???
Includi il comando in /etc/rc.local
. Verrà eseguito ogni volta che cambia il runlevel dell'utente.
Nota: Devi inserire il comando prima dell'ultima riga in /etc/rc.local che contiene: "exit 0".
/etc/rc.local
che contiene: exit 0
/etc/rc.local
in Ubuntu 15.10 ha commentato che "Questo script viene eseguito alla fine di ogni runlevel multiutente". Quindi lo script potrebbe essere eseguito più volte durante l'avvio, giusto?
Utilizza crontab
un'opzione per eseguire lo script dopo il riavvio,
puoi farlo aggiungendo il @reboot
codice in cron
Apri crontab dall'utente root:
$ sudo crontab -e
Aggiungi il prossimo record in fondo:
@reboot yourScriptPath
Quello farà quello che vuoi.
crontab -e
, che non ha bisogno dei privilegi di superutente? Mi chiedo se è possibile eseguire script che devono essere eseguiti come root.
sudo crontab -e
esegui il comando per farlo eseguire lo script come root durante l'avvio.
/var/run/crond.reboot
, in caso contrario, non eseguirà l'attività
Questo ha funzionato per me su Ubuntu 17.04:
creare il file di script del tour come disable_cdrom
nella posizione più comoda per te. Nel mio caso home/yterle/disable_cdrom
. Nel mio caso:
#!/bin/sh
eject /dev/sr0 -i 1
renderlo eseguibile chmod 775 disable_cdrom
/etc/systemd/system
e creare lì un service
file. Per esempiosudo gedit /etc/systemd/system/disable_cdrom.service
Il mio disable_cdrom.service
assomiglia a questo:
[Unit]
Description=Disable cdrom
[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom
[Install]
WantedBy=multi-user.target
Dove ExecStart
punta per eseguire lo script/bin/sh
Quindi eseguire systemctl enable disable_cdrom.service
per abilitare il servizio systemd
systemctl enable disable_cdrom.service
Includi il tuo file Script /etc/init.d/
con autorizzazione eseguibile, quindi imposta un livello di esecuzione diverso
$ update-rc.d script-name default
Metterà il tuo script all'avvio.
update-rc.d script-name enable
?
Attento con l'aggiunta della sceneggiatura a rc.local
- ero bloccato nella schermata iniziale a causa sua. Premendo Alt+ hai F1rivelato cosa stava succedendo dietro la schermata iniziale (lo script rc.local
era in esecuzione).
Non potevo uscirne.
niente funziona.
Ho dovuto avviare un'immagine USB Ubuntu, trovare rc.local
, concedermi le autorizzazioni per archiviarlo ed eliminarlo. Immagino che non dovresti fare cose se non sai cosa stai facendo.
autostart
manifesti o in*.service
file in diverse posizioni, nonché ininit.d
ocrontab
. Guarda questo: unix.stackexchange.com/a/525845/43233