¿Algo como Cron?
Tenga en cuenta el @reboot
entrada
Este es el enfoque más flexible y el que más se parece a las "Tareas programadas" de Windows (mejor en realidad).
Inicio automático de Xorg
Además de los scripts de inicio a nivel del sistema, su entorno de escritorio puede tener su propia forma de ejecutar programas automáticamente. La carpeta .config/autostart
se supone que es una forma neutral de escritorio de definir las entradas de ejecución automática. /etc/xdg/autostart
es para la configuración de todo el sistema. Detalles sobre la especificación en http://developer.gnome.org/autostart-spec/.
Para LXDE, las entradas de inicio automático también se pueden configurar en ~/.config/lxsession/LXDE/autostart
.
Es un poco diferente si necesita ejecutar sus scripts después la red está funcionando. En ese caso, debe verificar los scripts especiales posteriores a la conexión que se pueden definir para su administrador de red. Ambos NetworkManager y wicd tienen sus propias formas de especificar entradas de ejecución automática posteriores a la conexión. Si la red está configurada a través de ifupdown
, entonces las secuencias de comandos posteriores se pueden colocar en el /etc/network/if-up.d/
carpeta. Pero un mejor enfoque para ejecutar secuencias de comandos posteriores a la conexión podría ser systemd (para los sistemas que lo admiten, que es la mayoría de las distribuciones modernas).
Inicio automático como un servicio systemd
Si lo que desea iniciar automáticamente no es una aplicación gráfica que requiere un escritorio, entonces es mejor evitar el uso de las funciones de inicio automático proporcionadas por xorg o por su entorno de escritorio actual.
systemd
se ha vuelto omnipresente en muchas distribuciones modernas y ofrece mucho control y flexibilidad en términos de cómo se inician y ejecutan sus servicios.
Resumiré algunos beneficios (systemd puede hacer mucho más ):
- Ejecutar como raíz o como usuario específico:p.
User=myuser
- Reiniciar servicios en caso de falla con tiempos de espera configurables:
Restart=on-failure|on-watchdog|on-abnormal|always
- Configuración del tipo de servicio:
Type=simple|forking|oneshot|notify|dbus
- Establezca dependencias y condiciones previas de inicio, es decir, puede configurar su servicio para que se inicie después de que la red esté activa (
Wants=network-online.target
en el[Unit]
sección).
Un servicio de ejemplo que inicia un demonio telegram-cli. Colócalo en /etc/systemd/system/tg.service
.
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
Ahora puede habilitar el servicio para que se inicie automáticamente:
sudo systemctl enable tg
Inicie el servicio:
sudo systemctl start tg
Detener el servicio:
sudo systemctl stop tg
Verifique el estado:
systemctl status tg
Deshabilitar el servicio:
sudo systemctl disable tg
Para ahorrarte tipeo adicional, puedes agregar tu ~/.bashrc
la línea alias sc='sudo systemctl $*'
entonces podrá acortar los comandos anteriores a, p. sc start tg
.
Más información:
- Comprender systemd
- servicios systemd
- unidades systemd
Sí, es posible ejecutar programas al inicio en Linux definiendo las rutas a los ejecutables en rc.local
que reside en el /etc
o /etc/rc.d
directorio, por ejemplo:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/path/to/executable
Nota:no olvide asignar derechos ejecutables como se describe en la documentación del archivo, es decir, Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.