Cómo ejecutar un script durante el arranque como root
59
Tenía un script que habilita automáticamente mi wifi sin usar networkmanager, pero no sé cómo ejecutar el script como root mientras el sistema se inicia. ¿Cómo hago que el script se ejecute automáticamente durante el arranque?
Los programas de inicio automático se configuran en autostartmanifiestos o en *.servicearchivos en varias ubicaciones, así como en init.do crontab. Vea esto: unix.stackexchange.com/a/525845/43233
Noam Manos
Respuestas:
54
Coloque el script que desea ejecutar en el directorio /etc/init.d y haga que el script sea ejecutable.
chmod 755 myscript
Una vez hecho esto, cree un enlace simbólico en el directorio de nivel de ejecución que le gustaría usar, por ejemplo, si desea ejecutar un programa en el nivel de ejecución gráfico 2, el nivel de ejecución predeterminado para Ubuntu, lo colocaría en el /etc/rc2.ddirectorio. Simplemente no puede colocarlo en el directorio, debe indicar cuándo se ejecutará indicando el inicio con una "S" y el orden de ejecución es importante. Colóquelo después de todo lo que está en el directorio dándole un número más alto.
Si el último script que se ejecutará es rc.localy se nombra, S99rc.localentonces debe agregar su script como S99myscript.
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
Cada /etc/rc*.ddirectorio compatible con versiones anteriores tiene enlaces simbólicos al /etc/init.d/directorio.
Tenga en cuenta que en Ubuntu Server 14.04, necesitaba usar /etc/rc2.d, en lugar de rc3.dcomo se indica en el ejemplo. Parece rc2.dque no es solo el nivel de ejecución gráfica.
Brad
1
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.dlo llevará a qué /etc/rc?.ddirectorio corresponde a su nivel de ejecución predeterminado.
Kevin
1
En cambio: "Si el último script que se ejecutará es rc.localy se nombra, S99rc.localentonces debe agregar su script como S99myscript". ¿Quiso decir: "Si el último script que se ejecuta es myscripty se nombra, S99myscriptentonces debe agregar su script como S99myscript"?
Dor
66
Tenga en cuenta que esto no funcionará con systemd (es decir, comenzando con Ubuntu 16.04). Ver esto en su lugar.
Alexander Revo
26
Incluya el comando en /etc/rc.local. Se ejecutará cada vez que cambie el nivel de ejecución del usuario.
Nota: Debe colocar el comando antes de la última línea en /etc/rc.local que contiene: "exit 0".
Nota: debe colocar el comando antes de la última línea /etc/rc.localque contiene: exit 0
rubo77
3
/etc/rc.localen ubuntu 15.10 comenta que "este script se ejecuta al final de cada nivel de ejecución multiusuario". Entonces, el script podría ejecutarse varias veces durante el arranque, ¿verdad?
jarno
@ jamo, sí, en cada nivel de ejecución. No sé cómo se relaciona esto con la ejecución "en el arranque", que generalmente significa "ejecutar una vez en el arranque".
erm3nda
17
Use una crontabopción para hacer que su script se ejecute después de reiniciar,
¿Te refieres a usar el comando crontab -e, que no necesita privilegios de superusuario? Me pregunto si puede ejecutar scripts que deben ejecutarse como root.
jarno
Probé esto. No ejecuta el script como root.
jarno
44
Debe agregar la línea mientras ejecuta el comando sudo crontab -epara que ejecute el script como root durante el inicio.
jarno
no se olvide de quitar /var/run/crond.reboot, si no, no se ejecutará la tarea
Albert Català
Solo para el registro, estoy seguro de que @jarno ya lo sabrá. Cada usuario tiene su propia tarea cron, por lo que si la agrega a la de su usuario (ejecutando crontab -e sin sudo) el usuario ejecutará el script. Por lo tanto, debe ejecutarlo como root para permitir que pueda ejecutar scripts como root en el arranque.
eddieferetro
9
Esto funcionó para mí en Ubuntu 17.04:
cree un archivo de guión turístico como disable_cdromconveniente para su ubicación. En mi caso home/yterle/disable_cdrom. En mi caso:
#!/bin/sh
eject /dev/sr0 -i 1
hazlo ejecutable chmod 775 disable_cdrom
navegar /etc/systemd/systemy crear allí un servicearchivo. Por ejemplosudo gedit /etc/systemd/system/disable_cdrom.service
Cuidado con agregar el script a rc.local- me quedé atrapado en la pantalla de bienvenida por eso Al presionar Alt+ se F1reveló lo que estaba sucediendo detrás de la pantalla de inicio (el script se rc.localestaba ejecutando).
No pude salir de eso.
Ctrl+ Alt+ Delo
Alt+ PrtSc+ Ko
Ctrl+ Alt+F#
nada funciona.
Tuve que arrancar desde una imagen USB de Ubuntu, buscar rc.local, darme permisos para archivar y eliminarlo. Supongo que no deberías hacer cosas si no sabes lo que estás haciendo.
autostartmanifiestos o en*.servicearchivos en varias ubicaciones, así como eninit.docrontab. Vea esto: unix.stackexchange.com/a/525845/43233Respuestas:
Coloque el script que desea ejecutar en el directorio /etc/init.d y haga que el script sea ejecutable.
Una vez hecho esto, cree un enlace simbólico en el directorio de nivel de ejecución que le gustaría usar, por ejemplo, si desea ejecutar un programa en el nivel de ejecución gráfico 2, el nivel de ejecución predeterminado para Ubuntu, lo colocaría en el
/etc/rc2.ddirectorio. Simplemente no puede colocarlo en el directorio, debe indicar cuándo se ejecutará indicando el inicio con una "S" y el orden de ejecución es importante. Colóquelo después de todo lo que está en el directorio dándole un número más alto.Si el último script que se ejecutará es
rc.localy se nombra,S99rc.localentonces debe agregar su script comoS99myscript.Cada
/etc/rc*.ddirectorio compatible con versiones anteriores tiene enlaces simbólicos al/etc/init.d/directorio.fuente
/etc/rc2.d, en lugar derc3.dcomo se indica en el ejemplo. Parecerc2.dque no es solo el nivel de ejecución gráfica.cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.dlo llevará a qué/etc/rc?.ddirectorio corresponde a su nivel de ejecución predeterminado.rc.localy se nombra,S99rc.localentonces debe agregar su script comoS99myscript". ¿Quiso decir: "Si el último script que se ejecuta esmyscripty se nombra,S99myscriptentonces debe agregar su script comoS99myscript"?Incluya el comando en
/etc/rc.local. Se ejecutará cada vez que cambie el nivel de ejecución del usuario.Nota: Debe colocar el comando antes de la última línea en /etc/rc.local que contiene: "exit 0".
fuente
/etc/rc.localque contiene:exit 0/etc/rc.localen ubuntu 15.10 comenta que "este script se ejecuta al final de cada nivel de ejecución multiusuario". Entonces, el script podría ejecutarse varias veces durante el arranque, ¿verdad?Use una
crontabopción para hacer que su script se ejecute después de reiniciar,puedes hacerlo agregando
@rebootcódigo en cronAbrir crontab por usuario root:
Agregue el siguiente registro en la parte inferior:
Eso hará lo que quieras.
fuente
crontab -e, que no necesita privilegios de superusuario? Me pregunto si puede ejecutar scripts que deben ejecutarse como root.sudo crontab -epara que ejecute el script como root durante el inicio./var/run/crond.reboot, si no, no se ejecutará la tareaEsto funcionó para mí en Ubuntu 17.04:
cree un archivo de guión turístico como
disable_cdromconveniente para su ubicación. En mi casohome/yterle/disable_cdrom. En mi caso:hazlo ejecutable
chmod 775 disable_cdrom/etc/systemd/systemy crear allí unservicearchivo. Por ejemplosudo gedit /etc/systemd/system/disable_cdrom.serviceMi
disable_cdrom.serviceaspecto es este:Donde
ExecStartpuntos para ejecutar su script con/bin/shLuego, ejecute
systemctl enable disable_cdrom.servicepara habilitar el servicio systemdfuente
systemctl enable disable_cdrom.serviceIncluya su archivo de Script
/etc/init.d/con permiso ejecutable y luego establezca un nivel de ejecución diferentePondrá su script en el inicio de arranque.
fuente
update-rc.d script-name enable?Cree un archivo de texto como este en
/etc/cron.d/:(Debe reemplazar
yourScriptPathcon la ruta de acceso al script que desea ejecutar).fuente
Cuidado con agregar el script a
rc.local- me quedé atrapado en la pantalla de bienvenida por eso Al presionar Alt+ se F1reveló lo que estaba sucediendo detrás de la pantalla de inicio (el script serc.localestaba ejecutando).No pude salir de eso.
nada funciona.
Tuve que arrancar desde una imagen USB de Ubuntu, buscar
rc.local, darme permisos para archivar y eliminarlo. Supongo que no deberías hacer cosas si no sabes lo que estás haciendo.fuente