Obtener un script para ejecutar en el arranque, no al iniciar sesión

11

¿Cómo puedo hacer que se ejecute un script específico (preferiblemente no como superusuario) cada vez que se inicia la máquina, pero antes de iniciar sesión? Puede ser lo último que se ejecute en el arranque. Principalmente solo quiero que el script funcione incluso si ningún usuario inicia sesión.

Malabarba
fuente
1
@bruce eche un vistazo a esto -> askubuntu.com/questions/9382/…
hhlp
1
Puedes usar upstart o cron o probablemente muchos otros métodos. Una cosa importante a saber es también la forma temprana se puede ejecutar. Por ejemplo, ¿necesita un sistema de archivos particular para ser montado, necesita X para ejecutarse, necesita DBus, necesita redes, o más en general: necesita recursos para estar presente?
JanC
@ JanC: Sí, en realidad, necesita casi todo lo que pediste (excepto X), por eso me gustaría que sea lo último que se ejecute. Realmente tampoco hay razón para ejecutarlo antes.
Malabarba
@hhlp: Genial, gracias. Pero, ¿qué tan temprano se ejecutará el script si uso ese método? Como mencioné anteriormente, es mejor si es una de las últimas cosas (antes de iniciar sesión).
Malabarba
Bueno, el inicio de sesión no requiere redes, a menos que desee iniciar sesión en un servidor de terminal y / o tenga su $ HOME en un
recurso

Respuestas:

8

Yo recomendaría usar cron. El valor de tiempo especial de @rebootgenerará su trabajo en cada reinicio como usuario. Por ejemplo, ejecute crontab -ey use:

@reboot /home/yourself/bin/some_script_to_run

Para obtener más detalles sobre los formatos de hora especiales, consulte man 5 crontab

Kees Cook
fuente
Gracias, parece bastante fácil. Esto no depende de qué usuario crea el cronjob ¿verdad? Se ejecuta al final del arranque, independientemente de los inicios de sesión.
Malabarba
Depende absolutamente de quién creó el cronjob: se ejecutará como ese usuario. Pero no depende de ellos para iniciar sesión.
Kees Cook
Tenga en cuenta que esto ejecuta el script cuando se inicia el demonio cron, por lo que es posible que otro sistema que pueda necesitar aún no esté listo.
PhoneixS
4

Una posibilidad es usar Upstart. Esto le permite especificar cuándo desea ejecutar su script en términos de dependencias, por ejemplo, "cuando los sistemas de archivos están montados y la interfaz de red eth0está funcionando". Cree un archivo /etc/init/bruce_script.conf(debe crear el archivo como root) que contenga algo como esto:

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

Consulte la documentación inicial para obtener más información, en particular la init(5)página del manual para obtener una lista de lo que puede poner en ese archivo de configuración.

Gilles 'SO- deja de ser malvado'
fuente
¿Hay una lista de eventos de inicio que se pueden usar?
sol 29/10/10
@ Markus: no que yo sepa. Los eventos estándar tienen una página de manual en la sección 7 (así dpkg -L upstart |grep /man7/), y puede ver los eventos emitidos y utilizados como disparadores en los scripts existentes en /etc/init.
Gilles 'SO- deja de ser malvado'