¿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?

Demi
fuente
Todas las distribuciones de Linux ya establecen el tiempo. ¿Quizás la batería de su RTC en la placa base está baja?
Algún programador amigo
@JoachimPileborg en realidad no hay RTC en mi placa base :) Es una placa de sistema integrada sin RTC.
2
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.

MariusMatutiae
fuente
1
¿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.
MariusMatutiae
2
tal vez este es un alias desconocido para mí pero @bootno existe, solo @reboot debianhelp.co.uk/crontab.htm
Zarathustra
19

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.

Keith Thompson
fuente
2
¿Cómo puede haberse escrito esta respuesta más de un año antes de la pregunta original?
MariusMatutiae
1
@MariusMatutiae meta.stackoverflow.com/q/294543/827263
Keith Thompson
+1 para especificar que requiere Vixie cron.
Javier Arias
10

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

davidgo
fuente