¿Cómo puedo ejecutar un comando después del arranque?
27
Me gustaría ejecutar el comando de shell simple echo 1 > /proc/sys/kernel/sysrqen cada arranque, para habilitar las teclas sysrq. ¿Cuándo se debe hacer esto en el arranque y dónde debo poner un script para hacerlo?
Ruego diferir, @davidgo. Las referencias que está citando son un poco obsoletas: mientras que crontab funciona, /etc/rc.local no funciona en systemddistribuciones como Arch Linux. Al referirnos a ellos, podríamos estar enviando a Demetri a una persecución salvaje. Algunas actualizaciones, a veces, deben hacerse.
MariusMatutiae
Respuestas:
37
Depende de las distribuciones.
Si está en distribuciones derivadas de Debian, hay al menos dos lugares adecuados, /etc/rc.local y crontab. Puedes invocar crontab como root,
crontab -e
y luego inserte esta línea
@reboot /home/my_name/bin/my_command
donde my_commandes un archivo ejecutable ( chmod 755 my_command).
Alternativamente, puede colocar una línea como esta
/home/my_name/bin/my_command
en /etc/rc.local, y esto se ejecutará en último lugar. En cualquier caso, recuerde que está utilizando un entorno raíz, no el suyo. También por esta razón, es mejor usar rutas absolutas.
Si está en una distribución systemd (Arch Linux, Fedora 19, ...) la primera opción (crontab) sigue siendo válida, mientras que la segunda (/etc/rc.local) ya no existe. En este caso, debe aprender cómo iniciar un servicio para que se ejecute systemctl, pero esto puede ser más de lo que esperaba con su simple pregunta.
¿Puedes confirmar esto para Fedora? Mi búsqueda me dice que rc.local aún se ejecutará si existe y es ejecutable, pero no está configurado de manera predeterminada. ¡Percibí ramificaciones problemáticas si rc.local no se ejecuta! (Solo pude encontrar referencias para esto para Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo
Tienes razón, en Fedora 19 aún puedes tenerlo, si realmente lo quieres. Pero ya no está empaquetado, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… bullet 3.2.4. Además, no existe en Arch Linux por completo, así que pensé que era seguro incluir una advertencia al respecto.
Si su sistema ejecuta una versión cronque lo admite (específicamente Vixie cron), puede usarlo @rebooten un trabajo cron.
Esta es una de las 8 cadenas especiales que admite.
Citando la crontab(5)página del manual (de mi sistema Ubuntu 12.04):
En lugar de los primeros cinco campos, puede aparecer una de las ocho cadenas especiales:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
Tenga en cuenta que el inicio, en lo que a él @rebootrespecta, es el momento en que se inicia el demonio cron (8) . En particular, puede ser antes de que algunos demonios del sistema u otras instalaciones se inicien. Esto se debe a la secuencia de orden de arranque de la máquina.
Esto está lejos de ser la única forma de ejecutar algo en el momento del arranque, pero es una alternativa.
Casi todas las variantes de Linux (que se remontan mucho, mucho tiempo) tienen un archivo /etc/rc.local que se ejecuta en el inicio; simplemente puede agregarle el comando.
Dicho esto, ni siquiera necesitas hacer eso. La forma "correcta" sería modificar / agregar la línea kernel.sysrq = 1 en /etc/sysctl.conf
systemd
distribuciones como Arch Linux. Al referirnos a ellos, podríamos estar enviando a Demetri a una persecución salvaje. Algunas actualizaciones, a veces, deben hacerse.Respuestas:
Depende de las distribuciones.
Si está en distribuciones derivadas de Debian, hay al menos dos lugares adecuados, /etc/rc.local y crontab. Puedes invocar crontab como root,
y luego inserte esta línea
donde
my_command
es un archivo ejecutable (chmod 755 my_command
).Alternativamente, puede colocar una línea como esta
en /etc/rc.local, y esto se ejecutará en último lugar. En cualquier caso, recuerde que está utilizando un entorno raíz, no el suyo. También por esta razón, es mejor usar rutas absolutas.
Si está en una distribución systemd (Arch Linux, Fedora 19, ...) la primera opción (crontab) sigue siendo válida, mientras que la segunda (/etc/rc.local) ya no existe. En este caso, debe aprender cómo iniciar un servicio para que se ejecute
systemctl
, pero esto puede ser más de lo que esperaba con su simple pregunta.fuente
@boot
no existe, solo@reboot
debianhelp.co.uk/crontab.htmSi su sistema ejecuta una versión
cron
que lo admite (específicamente Vixie cron), puede usarlo@reboot
en un trabajo cron.Esta es una de las 8 cadenas especiales que admite.
Citando la
crontab(5)
página del manual (de mi sistema Ubuntu 12.04):Esto está lejos de ser la única forma de ejecutar algo en el momento del arranque, pero es una alternativa.
fuente
Casi todas las variantes de Linux (que se remontan mucho, mucho tiempo) tienen un archivo /etc/rc.local que se ejecuta en el inicio; simplemente puede agregarle el comando.
Dicho esto, ni siquiera necesitas hacer eso. La forma "correcta" sería modificar / agregar la línea kernel.sysrq = 1 en /etc/sysctl.conf
fuente