Demonio cron y archivo /etc/crontab
En Linux se programarán las tareas con cron. Así por ejemplo, se podrá reaizar una copia de seguridad todos los días a la misma hora.
El programa cron se compone de 2 elementos: cron, el demonio (un ejecutable que está corriendo todo el tiempo) y el archivo de configuración /etc/crontab.
Si vemos los procesos en ejecución debe aparecer cron. En la línea siguiente se ejecuta ps -ef y filtramos con grep para obtener solo las líneas que aparezca cron:
miguel@SistemasUbuntu:~$ ps -ef | grep cron
#devolvemos solo líneas que aparezca cron (en Windows, utilizábamos “| find” en vez de “| grep”
root 580 1 0 06:51 ? 00:00:00 /usr/sbin/cron –f #efectivamente se está ejecutando el demonio cron
miguel 4517 2179 0 09:05 pts/1 00:00:00 grep --color=auto cron #esta línea no tienen ningún valor, solo está relacionada con la ejecución del ps
Archivo de configuración de las tareas programadas: /etc/crontab
Para añadir las tareas programadas, se pueden añadir directamente en el archivo /etc/crontab con cualquier editor.
Normalmente, se utiliza el comando: nano /etc/crontab
La diferencia entre editar el archivo directamente con nano /etc/crontab y utilizar el comando crontab -e radica en que con este último no hacen falta privilegios de root (automáticamente Linux configura que esa tarea se ejecute con los permisos concretos del usuario)
La primera vez que se ejecuta crontab –e se solicita el editor a utilizar (nano en nuestro caso)
Sintaxis de cada línea:
# m h dom mon dow command #encabezamiento del archivo
10 8 * * 3 /home/miguel/script.sh #Se ejecuta script.sh todos los miércoles a las 8:10. Ver significado de cada campo:
Significado de cada campo:
m: minuto
h: hora, las horas utilizan el formato de 24 horas, siendo válido entre 0 y 23
dom: day of month, día del mes
mon: month, mes
dow: day of weak, día de la semana, son válidos los valores 0 (domingo) a 6 (sábado). Es así pues en EEUU las semanas empiezan por domingo.
A continuación, se explican los comodines a utilizar con un ejemplo:
Ejemplos
- Apagar el computador todos los días a las 21.50. Añadir la siguiente línea:
50 21 * * * poweroff - Ejecutar script.sh, cada 20 minutos desde las 9 horas hasta las 10 de lunes a viernes. 2 opciones:
00,20,40 9 * * 1-5 /home/miguel/script.sh
*/20 9 * * 1-5 /home/miguel/script.sh - Crear una copia de seguridad cada 2 días a las 23.50 del home de todos los usuarios:
50 23 /2 * * tar –cvzf /root/home.tar.gz /home/*
El comando tar utilizado aquí se estudiará en la unidad 7. Sirve para obtener un archivo comprimido home.tar.gz con todo lo que hay en /home
Otras opciones del comando crontab:
Ver las tareas programadas de un usuario: crontab –l -u nombre_usuario
Eliminar las tareas de un usuario: crontab –r -u nombre_usuario
Carpetas predefinidas para la ejecuión periódica de tareas programadas en el directorio /etc
En versiones actuales de Linux, en /etc se encuentran los siguientes subdirectorios:
cron.hourly
cron.daily
cron.weekly
cron.monthly
Los scripts que se pongan en cada subdirectorio se ejecutarán una vez cada hora, día, semana o mes según subdirectorio utilizado.
Observaciones sobre los scripts
Los script de Linux son los equivalentes a los archivos por lotes de Windows. Mientras que en Windows, teníamos que llamarlos .bat, en Linux lo importante es que tengan los permisos de ejecución. Aun así, en Linux, aunque no es obligatorio, para diferenciarlos al listar un directorio, solemos poner a los scripts la extensión .sh
Un script de Linux también recibe los nombres de Shell-script y guiones Shell, en el sentido que se interpretan por la Shell del sistema.
La primera línea de un script.sh es:
#!/bin/bash
Esta línea sirve para decir, que el script lo va a interpretar la shell bash.
La programación de scripts de Linux no está incluida en el módulo.
Ejemplo de ejecución de un script
Realizar un script que cree un directorio, direccione contenido a un fichero dentro del directorio, limpie la pantalla y muestre el listado del directorio y el contenido del fichero.
miguel@SistemasUbuntu:~$ nano ejemplo.sh
#Con nano se escribe el contenido del script. Se muestra su contenido con cat.
miguel@SistemasUbuntu:~$ cat ejemplo.sh
#!/bin/bash
mkdir /home/miguel/carpeta
echo línea1 del fichero.txt > /home/miguel/carpeta/fichero.txt
clear
ls -l /home/miguel/carpeta
echo Se muestra contenido del fichero.txt:
cat /home/miguel/carpeta/fichero.txt
miguel@SistemasUbuntu:~$ ls -l ejemplo.sh
-rw-r--r-- 1 miguel miguel 218 ene 25 02:33 ejemplo.sh
#El archivo no es ejecutable, por lo que si se ejecuta, devuelve “Permiso denegado”
miguel@SistemasUbuntu:~$ ./ejemplo.sh
bash: ./ejemplo.sh: Permiso denegado
#Se pone permiso de ejecución al usuario propietario (miguel)
miguel@SistemasUbuntu:~$ chmod u+x ejemplo.sh
#Se ejecuta sin problemas. Limpia la pantalla.
miguel@SistemasUbuntu:~$ ./ejemplo.sh
#Limpia la pantalla, y devuelve listado de la carpeta y el contenido de fichero.txt
total 4
-rw-r--r-- 1 miguel miguel 24 ene 25 02:34 fichero.txt
Se muestra contenido del fichero.txt:
línea1 del fichero.txt
miguel@SistemasUbuntu:~$