¿cómo hacer que un un script inicie automáticamente?

Programacion en Bash

Moderadores: frank, dxfiles

Avatar de Usuario
Phantom
Mensajes: 25
Registrado: Lun, 08 Abr 2013, 13:27

Re: ¿cómo hacer que un un script inicie automáticamente?

Mensaje por Phantom » Vie, 19 Abr 2013, 11:50

También probé poniendo en /etc/init.d un script sencillo que me abriera nautilus, y tampoco se ejecutaba cuando me logueaba. Y si, le puse permisos de ejecución.

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: ¿cómo hacer que un un script inicie automáticamente?

Mensaje por hugo » Lun, 22 Abr 2013, 17:12

Si lo que deseas es que se ejecute algo al iniciar tu sesión, mejor editar ~/.bashrc y poner ahi el comando.
Si no te funciona es que hay algo mal en tu sistema, porque esto es funcionalidad estándar de bash.
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

Avatar de Usuario
Phantom
Mensajes: 25
Registrado: Lun, 08 Abr 2013, 13:27

Re: ¿cómo hacer que un un script inicie automáticamente?

Mensaje por Phantom » Mié, 31 Jul 2013, 13:34

No, el caso es que lo que esté en .bashrc, se ejecuta cada vez que se inicie un shell, no cuando se inicie el sistema. Pero bueno, el caso es que cuando uno quiere hacer un daemon, con agregarlo solamente a /etc/init.d no tiene el problema resuelto. He buscado mucho en internet, y todos los caminos apuntan a la misma dirección. Luego de haber copiado tu script a /etc/init.d con todos los permisos de ejecución, tienes que hacerle los enlaces simbólicos según cómo quieres que se ejecute. Los enlaces simbólicos tienen que ser desde /etc/rc<runlevel>.d. Los runlevels son los siguientes:

Nivel de ejecución ----Nombre o denominación -----Descripción
0 ----Alto------Alto o cierre del sistema (Apagado).
1 ----Modo de usuario único (Monousuario)-----No configura la interfaz de red o los demonios de inicio, ni permite que ingresen otro usuarios que no sean el usuario root, sin contraseña. Este nivel de ejecución permite reparar problemas, o hacer pruebas en el sistema.
2 ----Multiusuario----Multiusuario sin soporte de red.
3 ----Multiusuario con soporte de red.----Inicia el sistema normalmente.
4-------No usado.
5 ----Multiusuario gráfico (X11) -----Similar al nivel de ejecución 3 + display manager.
6 Reinicio Se reinicia el sistema.

El enlace sibólico tiene que tener el siguiente formato [S|K][0-9][0-9]<nombre script>.
Donde S viene de start y K viene de kill. Nunca se debe hacer un symlink con S desde los runlevel 0 ó 6. Los dos números son la prioridad para atender al daemon, el mas bajo es 99 y el más alto 00.
Por ejemplo:
Si quieres que se ejecute el daemon cuando se inicie la sesión con display manager, y se pare cuando se apague o se reinicie la máquina, debes de tener los siguientes ficheros (imaginando que tu script se llame script):
/etc/init.d/script
/etc/rc5.d/S98script --> /etc/init.d/script
/etc/rc0.d/K02script --> /etc/init.d/script
/etc/rc6.d/K02script --> /etc/init.d/script

El template del script de /etc/init.d/ es el siguiente:

Código: Seleccionar todo

# Script template para demonios
#!/bin/sh
 
programa=/home/usuario/programa/   #HOME del programa a ejecutar
startup=$programa/bin/startup.sh   #código para iniciar el programa
shutdown=$programa/bin/shutdown.sh #código para parar el programa

start(){
 echo -n $"Starting service: "
 $startup
 RETVAL=$?
 echo
}
 
stop(){
 echo -n $"Stopping service: "
 $shutdown
 RETVAL=$?
 echo
}
 
restart(){
 stop
 sleep 10
 start
}
 
# Dependiento del parametro que se le pase
#start - stop - restart ejecuta la función correspondiente.
case "$1" in
start)
 start
 ;;
stop)
 stop
 ;;
restart)
 restart
 ;;
*)
 echo $"Usar: $0 {start|stop|restart}"
 exit 1
esac
 
exit 0
Con todo esto debería ser suficiente para crear el daemon y se inicie en el próximo reinicio, así todo, no me funciona. Aunque ahora que lo pienso, no le he dado permiso de ejecución a los symlinks (aunque creo que cuando los creo, ya se crean con todos los permisos), voy a probar (sin muchas esperanzas), y después les digo.

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: ¿cómo hacer que un un script inicie automáticamente?

Mensaje por hugo » Mié, 31 Jul 2013, 16:35

El tema está en que los scripts de inicialiciación se ejecutan antes de que se inicie la sesión, por eso sugería utilizar .bashrc si lo que se desea es simplemente cargar nautilus. Es una forma de hacerlo, no la única. Otra variante podría ser colocar un script en /etc/X11/Xsession.d/

De todas maneras si lo que deseas es iniciar un daemon, el momento indicado es durante el inicio del sistema, no cuando se inicie la sesión. En este caso puedes cargarlo con los runlevels, con systemd, desde el archivo de interfaces, etc. Todo depende de tu configuracion y lo que desees hacer.
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

Avatar de Usuario
Phantom
Mensajes: 25
Registrado: Lun, 08 Abr 2013, 13:27

Re: ¿cómo hacer que un un script inicie automáticamente?

Mensaje por Phantom » Vie, 02 Ago 2013, 16:49

Bueno, todo lo que dije, que es lo que todos en internet dicen, no me funcionó. /etc/X11/Xsession.d/ me resolvió, era justo lo que estaba buscando. Estoy muy agradecido por tus respuestas. De todas formas me gustaría seguir investigando sobre los daemons, no solo para cuando se cargue la parte gráfica. Muchas gracias.

Responder