¿Cómo agregar un programa al arranque del sistema y convertirlo en un servicio?

En las distribuciones GNU/Linux, normalmente es muy fácil agregar un programa al arranque del sistema para que se ejecute como un servicio. Todo esto antes que sea lanzada la pantalla de conexión, y con los permisos de root. En este artículito, que no pretende ser nada presuntuoso, veremos como creamos el script, como lo agregamos, como lo hacemos ejecutable, y como lo agregamos al boot. Luego veremos como se hace para suprimirlo. A saber, que como soy usuario Ubuntu, el tutorial será mas especifico a esta distribución. Y que en Debian, por ejemplo es similar.
Antes de comenzar establezcamos una diferencia

Hay que diferenciar entre la tarea de agregar programas al inicio de la sesión de un usuario, que comenzarán a lanzarse cuando el usuario dé su identificador y palabra clave; con, pues pertenecen exclusivamente al usuario, nacen cuando se identifica y terminan cuando cierran su sesión. Eso vamos a verlo en otro artículo. Con la de agregar un programa al arranque del sistema, que se ejecutará para todas las sesiones, que tiene permiso de superusuario (root) y que finalizará en el momento del apagado del equipo. Este ultimo será objeto de otro artículo.

I. Creando el Script y estableciéndolo en la zona de arranque para que se ejecute automaticamente al momento del booteo

a) Comencemos por crear el archivo, que vamos a grabar en el directorio  « /etc/init.d », y que lanzará ese programa que deseamos se ejecute automáticamente al encendido del equipo.

Abriremos un terminal, nos serviremos del editor de textos que deseemos (vi, nano, gedit, scite...)

sudo nano /etc/init.d/el_servicio_a_crear

b) Una vez creado y abierto el archivo, le inserto un comando que deseo que se ejecute en el boot (para el caso, yo inserto uno que es inofensivo, como « uname », que me indicara la información del sistema), y lo haré del modo siguiente :

#!/bin/sh
uname -a

c) Grabo el archivo, y procedo a rendirlo « ejecutable », del siguiente modo :

sudo chmod +x /etc/init.d/el_servicio_a_crear

d) Procedo, a continuación, a establecerle la secuencia de booteo y de agregarlo al mismo, de la siguiente forma

sudo update-rc.d mon_service defaults 80 - (Ver)

II. Suprimir este script y retirarlo de la zona de booteo

Obviamente, este script que había creado es realmente inutil, solo era una muestra. ¡No me interesa que el mismo se ejecute cada vez que inicio el sistema!, asi que voy a borrarlo y hacerlo desaparecer de la secuencia de inicio.

Para ello, solo me basta lanzar el siguiente comando

sudo update-rc.d -f el_servicio_a_crear remove

- IMPORTANTE A SABER -

Digamos que esta acción «removerá» el script de la secuencia, pero « no » borrará el archivo creado (que he dado en llamar «el_servicio_a_crear»), el mismo quedará simplemente inhabilitado. Si deseo borrarlo deberé hacerlo manualmente, de la siguiente forma :

sudo rm /etc/init.d/el_servicio_a_crear

- IMPORTANTE A SABER -

«sudo» es obligatorio, porque «/etc/init.d/el_servicio_a_crear» tiene como propietario a «root»

III. Otra vuelta de tuerca...

Vamos a ir un poco mas lejos, sólo un poco, porque hay que destacar que normalmente todo servicio toma un parámetro que esta establecido en tres comandos :

start
stop
restart

Es por eso, que para que nuestro script pueda ser «iniciado», «detenido», o «restablecido», debe ser perfeccionado siguiendo, mas o menos esta estructura :

#!/bin/sh
start()
{
# Aca escribiremos el inicio de nuestro programa echo "start"
}
stop()
{
# Acá escribiremos un kill sobre nuestro programa echo "stop"
}
restart()
{
stop; sleep 1; start;
}
case $1
in start)
    start;;
stop)
    stop;;
restart)
    restart;;
*)
    start;;
esac