Comando crontab con init 1 en Linux [SOLUCIONADO]

En el mundo de la administración de sistemas **Linux**, una de las herramientas más potentes que poseen los usuarios para la automatización de tareas es `crontab`. Esencialmente, es un servicio de programación de tareas que permite a los usuarios ejecutar automáticamente scripts o comandos en un momento determinado, frecuencia o bajo ciertas condiciones. El uso de **cron** es una habilidad básica que cualquier administrador de sistemas o entusiasta de Linux debería conocer y aprovechar.

### La Sintaxis Básica de Crontab

Para poder aprovechar `crontab`, es importante entender su sintaxis. Un **cron job**, o tarea programada, se compone de dos partes principales: la expresión de tiempo y el comando a ejecutar. La expresión de tiempo consta de cinco campos que determinan cuándo se ejecutará la tarea:

– Minuto (0 – 59)
– Hora (0 – 23)
– Día del mes (1 – 31)
– Mes (1 – 12)
– Día de la semana (0 – 7, donde 0 o 7 es Domingo)

#### Ejemplo de una Entrada en Crontab:

0 * * * * /home/usuario/script.sh

Esta entrada ejecutaría `script.sh` al principio de cada hora.

### Editando Crontab

Para editar las tareas programadas, se utiliza el comando `crontab -e`. Esto abrirá el editor de texto predeterminado y permitirá al usuario añadir, modificar o eliminar tareas.

crontab -e

### Listando Tareas Programadas

Una vez creadas las tareas programadas con `crontab`, es posible listar todas las tareas de un usuario con `crontab -l`, lo que permite revisar la programación de las labores automatizadas.

crontab -l

### Usando crontab con runlevels

La programación de tareas con `crontab` está relacionada con los **runlevels** de Linux. Los **runlevels**, o niveles de ejecución, son estados del sistema que definen qué servicios están disponibles. Por ejemplo, el **runlevel 1**, también conocido como **single user mode**, es un estado de mantenimiento o recuperación donde no se levantan todos los servicios habituales y solo un usuario puede estar conectado al sistema.

#### Ejemplo de Tarea en Runlevel 1:

Para ejecutar una tarea de cron en el **runlevel 1**, se debe definir explícitamente que se quiera ejecutar en ese estado. Esto no se gestiona directamente a través de crontab, sino que se debe configurar el servicio en sí o usar comandos que verifiquen el runlevel actual antes de realizar una operación. A continuación un ejemplo simple en un script:

if [ "$(runlevel | cut -d ' ' -f2)" = "1" ]; then
    # Comando a ejecutar
fi

Este fragmento de código se puede colocar en un script de shell que esté programado en `crontab`, tal manera que primero verifique que el sistema se encuentre en el **runlevel 1** antes de ejecutar su operación.

### Ejecutando Tareas en Función del Runlevel

**System V init**, o `init`, fue el sistema de inicialización de servicios en Linux tradicionalmente, antes de ser reemplazado en muchos sistemas por **systemd**. Los **runlevels** están integrados en `init` y controlan los servicios que se inician en la carga del sistema, donde cada nivel tiene una serie de scripts que se ejecutan al entrar en él.

Para definir tareas específicas de cron que se ejecuten al cambiar a un **runlevel** en particular, como el **runlevel 1**, en sistemas que usen `init`, se debe configurar en los scripts de inicio asociados a ese nivel en particular, generalmente ubicados en `/etc/rc.d` o `/etc/init.d`.

También se puede usar el comando `telinit` para cambiar el **runlevel** del sistema. Supongamos que se necesita ejecutar un script al pasar al modo de usuario único (runlevel 1):

telinit 1 && /ruta/a/mi/script

Sin embargo, este tipo de acciones se manejan generalmente fuera de crontab y más dentro de los procedimientos de gestión de sistema. La razón es que al cambiar a **runlevel 1**, el servicio **cron** podría no estar disponible.

### Alternativas en Sistemas con systemd

En sistemas modernos que utilizan **systemd** en lugar de `init`, la gestión de **runlevels** se ha reemplazado con `targets`. Por ejemplo, el equivalente en `systemd` para el **runlevel 1** sería `rescue.target`. En este caso, no se utilizaría `crontab` para manejar tareas en diferentes `targets`, sino que se crearían servicios de **systemd** con la configuración deseada para que se ejecuten en ciertos `targets`.

sudo systemctl enable mi-servicio.service
sudo systemctl start mi-servicio.service

### Conclusión

Es importante resaltar que, aunque la potencialidad de `crontab` es muy amplia, el contexto **runlevel 1** limita las acciones que pueden ser llevadas a cabo debido a su naturaleza de mantenimiento y recuperación del sistema. La flexibilidad de Linux permite que, con una adecuada planificación, conocimiento del sistema y creatividad, los administradores y usuarios pueden adaptar herramientas como crontab y alternativas modernas a sus necesidades específicas.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad