¿Cuál es el equivalente de Linux del inicio de Windows?

16

¿Hay alguna forma de agregar una aplicación / script al inicio de Linux para que cada vez que se inicie el sistema se ejecute?

Estoy buscando una forma automatizada, es decir, el usuario no debe agregar esto por trabajo cron o algo así.

Sourav
fuente
Vea también esta respuesta SO: Ejecute automáticamente el programa al inicio en Linux ubuntu
Abhishek Gupta
si es ubuntu solo use $ gnome-session-properties
user3804598

Respuestas:

11

Algo como Cron ?

Tenga en cuenta la @rebootentrada

Este es el enfoque más flexible, y el más parecido a las "Tareas Programadas" de Windows (mejor en realidad).

kevlar1818
fuente
¿Es posible agregar un trabajo en CRON sin la intención del usuario?
Sourav
si. simplemente escriba /etc/cron.do llame a crontab desde su programa sin que ellos lo sepan.
¿Qué quieres decir? Si quiere decir agregar manualmente uno programáticamente, entonces sí. Las tablas de referencias son solo archivos de texto.
10

Inicio automático de Xorg

Además de los scripts de inicio a nivel del sistema, su entorno de escritorio podría tener su propia forma de ejecutar programas automáticamente. Se .config/autostartsupone que la carpeta es una forma neutral para el escritorio de definir entradas de ejecución automática. /etc/xdg/autostartes 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 ~/.config/lxsession/LXDE/autostart.

Es un poco diferente si necesita ejecutar sus scripts después de que la red esté en funcionamiento. En ese caso, debe verificar los scripts especiales posteriores a la conexión que se pueden definir para su administrador de red. Tanto NetworkManager como wicd tienen sus propias formas de especificar entradas de ejecución automática posteriores a la conexión. Si la red se configura a través de ifupdown, los scripts posteriores se pueden colocar en la /etc/network/if-up.d/carpeta. Pero un mejor enfoque para ejecutar scripts posteriores a la conexión podría ser systemd (para 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 instalaciones 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 sus servicios y cómo se ejecutan.

Resumiré algunos beneficios ( systemd puede hacer mucho más ):

  • Ejecutar como root o como usuario específico: por ej. User=myuser
  • Reinicie los 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 condiciones y dependencias de inicio, es decir, puede configurar su servicio para que se inicie después de que la red esté activa ( Wants=network-online.targeten el[Unit] sección).

Un servicio de ejemplo que inicia un demonio telegram-cli. Colocarlo 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 iniciar automáticamente:

sudo systemctl enable tg

Comience el servicio:

sudo systemctl start tg

Detener el servicio:

sudo systemctl stop tg

Verifica el estado:

systemctl status tg

Deshabilitar el servicio:

sudo systemctl disable tg

Para ahorrarle un tipeo adicional, puede agregar su ~/.bashrclínea y alias sc='sudo systemctl $*'luego podrá acortar los comandos anteriores para, por ejemplo,sc start tg .

NOTA: Si ha utilizado cron, tenga en cuenta que las entradas de crontab se ejecutan en un entorno restringido; lo mismo se aplica a systemd: utilice siempre rutas absolutas y no haga suposiciones de ninguna variable que se esté definiendo. Establezca explícitamente cualquier variable de la que dependan sus scripts. systemd no usará su usuario .bashrcy $PATH.

Más información:

ccpizza
fuente
7

Sí, es posible ejecutar programas al inicio en Linux definiendo las rutas a los ejecutables rc.localque residen en el directorio /etco /etc/rc.d, 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.

Dirk Eddelbuettel
fuente
agregar entrada en el archivo iniciará el programa cada vez?
Sourav
2
Cada vez que reinicia, sí. Si desea trabajos programados regularmente (todos los días, horas, semanas o cualquier combinación extraña), entonces el cronprogramador es su amigo.
3
  1. Buscar Startup applications usar el botón de inicio
  2. Hacer clic Add
  3. Ingrese un nombre para llamar a la aplicación (cualquier nombre servirá)
  4. En el Startup command box ingrese el comando
  5. Hacer clic OK (debería ver su nuevo comando en la lista)
  6. Hacer clic Close

Pruebe reiniciando o desconectando y volviendo a iniciar sesión.

Fuente: https://help.ubuntu.com/community/AddingProgramToSessionStartup

codificador1111
fuente
1

Cada distribución utiliza cada una de las técnicas propias de bootstrap, por lo que debe buscar documentos para su distribución. /etc/rc.local es un lugar donde puede colocar algunos scripts automatizados, pero está realmente desactualizado. Ahora, la mayoría de los sistemas basados ​​en Linux utilizan niveles de ejecución o bootstraping systemd, por lo que la mayoría de los trabajos de inicio automático podrían controlarse de forma fina.

galadog
fuente
0

Encontré mi respuesta aquí: /programming/7221757/run-automatically-program-on-startup-under-linux-ubuntu Pude crear un archivo / script para apagar mi trackpad mientras estaba en mi sesión de Linux Ubuntu 12.10.

CatGuyTX
fuente
3
Me alegra que hayas encontrado una solución, ¿podrías incluir un resumen de los pasos en tu respuesta, solo para que esta respuesta sea más útil que solo un enlace? ¡Gracias!
slm
Estaba buscando una manera de automatizar y apagar mi trackpad al inicio. El comando que ingresé en la Terminal fue 'sudo modprobe -r psmouse' Esto apagaría el trackpad mientras estaba en la sesión actual. Quería automatizar esto en el arranque. Investigué un poco y escribí un script modificando el archivo /etc/rc.local, agregando 'sudo modprobe -r psmouse. Luego, emite los siguientes comandos desde la Terminal: 'sudo mv / filename /etc/init.d/' 'sudo chmod + x /etc/init.d/filename' 'sudo update-rc.d default de filename' Ahora el panel táctil está apagado Al inicio.
CatGuyTX