¿Cómo puedo ejecutar un script al inicio en una máquina Ubuntu Server 17.10? Creo que el método fue cambiado en 17.10.
fuente
¿Cómo puedo ejecutar un script al inicio en una máquina Ubuntu Server 17.10? Creo que el método fue cambiado en 17.10.
Coloque el script en la cron
tabla de usuario apropiada (es decir, el crontab ) con una programación de @reboot
.
Un usuario puede editar su cron
tabla con crontab -e
.
Un ejemplo que se ejecutará /path/to/script.sh
al inicio:
@reboot /path/to/script.sh
Si necesita ejecutarlo como root, no lo use @reboot sudo /path/to/script.sh
;
use sudo crontab -eu root
para editar el crontab de root.
Ver también: crontab (1), cron (8), crontab (8)
Ubuntu 15.04 y reenviar de manera predeterminada usa algo llamado systemd
, que es un programa (más o menos) que automatiza los servicios y procedimientos de inicio. Puede hacer el suyo y agregarlo a la lista de servicios de inicio con solo un poco de esfuerzo.
Servicio básico de Systemd
Este es un .service
archivo básico que podría usarse para iniciar mi servidor Python GUI (podría haber sido un script de shell, no importa):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
La Description
opción es cualquier cadena que describa qué es o hace el servicio.
La ExecStart
opción especifica el comando a ejecutar. Aquí, doy una ruta a un script ejecutable de Python y uso el &
token para ejecutarlo en segundo plano.
La WantedBy
opción especifica la precedencia, en función de qué destino desea usar este servicio. Si no necesita que su servicio se ejecute en un momento muy específico, simplemente configúrelo en multi-user.target
.
Procedimiento basico
Escriba el script que desea ejecutar en el inicio utilizando nano
o cualquier editor de su elección. Asegúrate de incluir el shebang adecuado en la parte superior del archivo ( #!/bin/bash
para scripts bash) y dale permisos de ejecución con chmod
.
Simplemente escriba su servicio en un archivo llamado my_service.service, y luego cópielo en el directorio correspondiente con cp my_service.service /lib/systemd/system/
.
Comience su servicio: sudo systemctl start my_service.service
. Esto inicia cualquier script que le haya indicado a su servicio que ejecute. El mismo comando con "detener" en lugar de inicio lo desactivará.
Añadir su servicio para el proceso de puesta en marcha: sudo systemctl enable my_service.service
. Para eliminarlo, simplemente reemplace "habilitar" con "deshabilitar" en el mismo comando.
¡Y eso es! Tenga en cuenta que su script se ejecutará automáticamente con permisos de root, ya que eso es predeterminado en los servicios systemd.
Mi ejemplo simple (completo)
Como referencia, aquí hay un servicio systemd simple que tengo que lanza un servidor Python GUI simple usando Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Este servicio de ejemplo usa un script Python3 pero la fórmula es exactamente la misma para un script de shell.
Puede encontrar más información en este excelente tutorial de DigitalOcean, y este hilo de AskUbuntu con una excelente respuesta que me ayudó a aprender systemd. ¡Espero que esto ayude!