About Taringa!

Popular channels

Programar tareas en Linux. crontab, rc.loal, at.

Hola a [email protected] en esta ocasión le voy a explicar cómo programar tareas con crontab y at, además del uso y manejo del archivo rc.local que se encuentra en /etc que sirve para que iniciemos nuestros propios scripts o cualquier demonio que no tenga un inicio automatico sin necesitad de agregarlo en /etc/init.d y tener un mejor manejo de lo iniciamos.



rc.local

Como ya lo había dicho rc.local es un archivo que se encuentra en /etc e inicia los demonios o scripts que le indiquemos al iniciar nuestro Linux.
En una terminal ejecutamos como root la siguiente línea
para editar el archivo, pueden utilizar cualquier editor de texto como nano, gedit, vim etc.

sudo nano /etc/rc.local



Vamos a agregar nuestras lineas justo antes de la linea “exit 0”, para este ejemplo voy a configurar la red para que cuando me inicie le configure mi tarjeta de red con la ip y mask que le voy a poner (esto solo lo utilizo como ejemplo porque la forma facil de configurar la red es editando el archivo “/etc/network/interfaces”).
Cabe recordar que para cada comando que coloquemos aquí lo debemos poner con su respectiva ruta
para saber la ruta de un comando hacemos lo siguiente

sudo which ifconfig

y nos devolverá la ruta del comando.



Agregamos la siguiente línea a /etc/rc.local (Antes de “exit 0”)

sudo /sbin/ifconfig eth0 200.80.30.30 netmask 255.255.255.0 up

y con esto al reiniciar nuestra tarjeta de red se va a configurar con la ip y mask que le pusimos anteriormente.



Ahora otro ejemplo será agregar nuestro propio script para este caso será agregar la fecha actual que sería la de encendido a un archivo de texto cada vez que se prenda el pc.
Primero creamos nuestro propio script en la ruta que prefieran

nano /home/ivan/hora.sh

Agregamos nuestras lineas al script
sudo date >> /home/ivan/HoraEncendido.txt

Le ponemos permisos de ejecución al nuestro script
chmod 777 /home/ivan/HoraEncendido.txt ó
chmod +x /home/ivan/HoraEncendido.txt


Ahora si agregamos la linea a nuestro /etc/rc.local
sudo /home/ivan/scripts/hora.sh



Bueno esta es una manera se puede agregar procesos al inicio del pc aunque esta no es una forma tan práctica y usual como la siguiente que es crontab




Crontab

Crontab es un paquete que por defecto viene instalado en nuestro sistema debian o Ubuntu, este “programa” nos permite ejecutar nuestras tareas a cierta hora y con cierta frecuencia como los son las copias de seguridad con las que explicare ente comando en este ejemplo. Para acceder a crontab ejecutamos como en una terminal lo siguiente:

sudo crontab –e



dentro de contrab tenemos el siguiente formato que es el que se debe seguir para programar las tareas

# m h dom mon dow command

m = minuto
h = Hora
dom = Dia del mes
mon = Mes a ejecutar
dow = Dia de la semana (Empieza en Domingo = 0)
command = Script a ejecutar o el comando en si que queremos ejecutar

Se puede Utilizar:
1. Un asterisco (*) equivale a todos los valores.
2. Un valor fijo Ej: 3 para indicar Miercoles en (dow).
3. Varios valores fijos separados por comas (1,3,6)
4. Un rango de valores separados por un guión (1-5)
5. Varios rangos separados por comas,(1-4,8-12)


6. /nº, para repetir la ejecución cada nº tiempo. Puede usarse con el asterisco o con un rango.Por ejemplo los siguientes valores puestos en el campo de la hora equivalen a ejecutar un comando cada seis horas: */6 = 0-23/6 = 0,6,12,18

Ejemplos:
# m h dom mon dow command

#hacer una copia de seguridad todos los lunes a las 2 de la mañana
0 2 * * 1 /home/ivan/backup.sh

# Reiniciar el pc todos los 1 y 15 de cada mes a la 4:30
30 4 1,15 * * /sbin/shutdown -r +3

#Apaga el pc a las 12 de Lunes a Viernes
0 12 * * 1-5 sudo halt

#Copia el directorio ivan cada 30 días:
* * */30 * * cp -a /home/ivan /mnt/hda6/copias

Ahora si vamos a realizar un script para hacer una copia de seguridad del directorio “/etc”

sudo nano /home/ivan/scripts/CopiaS.sh

Agregamos lo siguiente. (En este caso voy a realizar un script básico pero que sirve para el ejemplo).


#Script
echo "Iniciando Copia de Seguridad" # Mostramos un mensaje inicial
cd / #Nos ubicamos en en direcorio raiz donde se encuentra “etc”
tar -cjvf CopiaSeg.tar /etc #Empaquetamos etc
mv CopiaSeg.tar.bz2 /home/ivan #Movemos el archivo *.tar.bz2
cd /home/ivan/ #Nos ubicamos donde tenemos nuestra copia de seguridad
mv CopiaSeg.tar.bz2 `date +%d-%b-%Y_%H:%m`.tar.bz2 #Como nombre lo renombramos poniendole la fecha actual (en la que se creo)
echo "Copia De Seguridad Finalizada" #Mensaje Final
#Fin del Script


Una vez tengamos nuestro script listo procedemos a ingresar a crontab de la siguiente manera
Para agregar la tarea la debemos ejecutar al usuario root anteponiendo a cron la palabra sudo, y para agregarla a un usuario especifico se lo hace asi: (crontab -u usuario -e)

sudo crontab -e



Al final del archivo agregamos la siguiente tarea

0 10 * * * sudo /home/ivan/scripts/CopiaS.sh

La tarea se va aejecutar a las 10:00 am todos los días del mes, todos los meses, y todos los días de la semana
El segundo script se va a ejecutar el día 10 de cada mes a 5:01 am



Y finalmente para listar las tareas que tenemos programadas hacemos lo siguiente

Para tareas de root = sudo crontab -l
Para tareas de un usuario = crontab -u usuario -l



at

at es un comando que nos permitira ejecutar un script o demonios a una fecha y hora especifica El formato para añadir la tarea de ejecucion es la siguiente

Para Scripts
sudo at -f ruta/script tiempo (-f nos indica que es un archivo)

Para Demonios
sudo atd demonio tiempo


Formato del Tiempo

HH:MM -> 20:35 (se ejecutara hoy al as 20:35)
HH:MM DD.MM.AA -> 15:00 21.04.11 (se ejecutara el 21-04-11 a las 15:00)
now + tiempo -> now + 30 minutes (se ejecutara dentro de 30 minutos) (se puede sumar minutos, horas, dias y semañas)

Ahora si abrimos la terminal y agregaremos varias tareas

sudo at -f /home/ivan/scripts/CopiaS.sh now + 10 minutes
sudo at -f /home/ivan/Backup.sh 12:13 21.04.11
sudo atd apache2 20:13 25.04.11



Para listar las tareas usamos :
sudo atq

Para elimiar una tarea usamos:
sudo atrm num (num = numero que identifica a cada tarea que se muestra al listar las tareas)

Bueno y hasta aquí llega mi Post, espero que haya sido de su agrado y ojala les sirva mucho. Gracias.

Nota: Fuente (En algunos conceptos me apoye en un pdf que no tenía nombre) y captura de imágenes de mi propia autoría.
0No comments yet