En Ubuntu, cron es el «Administrador de tareas» en segundo plano (demonio) que ejecuta programas a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el archivo crontab.
Los usuarios habilitados para crear su archivo crontab se especifican en el archivo cron.allow. De manera análoga, los que no lo tienen permitido figuran en /etc/cron.d/cron.deny, o /etc/cron.deny, dependiendo de la versión de unix.
Cómo programar una tarea en crontab
Nada mejor que un ejemplo del archivo crontab
skrdz@root:#crontab -e (Ignora ésto… //Espero que lo abra en nano =D )
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root nice -n 19 run-parts /etc/cron.hourly
50 0 * * * root nice -n 19 run-parts /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly
Para agregar, quitar o modificar tareas, hay que editar el crontab. Esto se hace con la orden crontab -e, que abrirá el editor definido en la variable de entorno EDITOR y cargará el archivo crontab correspondiente al usuario que está logueado.
Cada vez que se ejecuta el crontab, se envía un mail al usuario que aparece en la variable de entorno MAILTO, si está habilitado, indicándole la tarea realizada.
La sintaxis en sí…
El símbolo Numeral «#» es un comentario, todo lo que se encuentre después de ese carácter no será ejecutado por cron. El momento de ejecución se especifica de acuerdo con la siguiente tabla:
- Minutos: (0-59)
- Horas: (0-23)
- Días: (1-31)
- Mes: (1-12)
- Día de la semana: (0-6), siendo 1=Lunes, 2=Martes, … 6=sábado y 0=Domingo
Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
La última columna corresponde al path absoluto del binario o script que se quiere ejecutar.
Por ejemplo:
24 12 * * 1 /usr/bin/who >> /home/hola.txt
Ejecuta la orden who todos los lunes a las 12:24 y guarda la salida en el archivo hola.txt
Para especificar dos o más valores en cada variable, estas deben estar separadas por comas, siguiendo con el ejemplo anterior:
0,24 * * * 1 /usr/bin/who >> /home/hola.txt
Ejecuta la orden who todos los lunes cada media hora y guarda la salida en el archivo hola.txt
Si queremos que se ejecute cada 15 minutos sería:
0,15,30,45 * * * * /usr/bin/who >> /home/quien.tex
ó
*/15 * * * * /usr/bin/who >> /home/quien.tex
En este ejemplo veremos como pasarle mas de un comando al cron y de paso como puede programarse una descarga:
30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://hola.com/archivo_a_descargar.loquesea
Este otro es para programar el apagado de la PC. En este caso todos los sábados a las 9:30 pm.
30 21 * * 6 /sbin/shutdown -h now
Espero que les haya servido!!! A mi me sirvió para programarle a moodle correr el script necesario para que envíe los correos de los foros o información importante a los estudiantes.
Gracias por la información 🙂 . Una antigua usuaria de Gentoo…
Hola, sabes, precisamente tengo el problema con moodle. necesito programar el envio de correos a los foros a una hora en la madrugada, ya que es la hora de menos carga de mi servidor de correo. Yo pensaba en bajar el postfix local y levantarlo solo para el envio de moodle al servidor de correo, pero leyendote dices qu e programaste el script. ¿Me podrías indicar como lo hiciste?.
muchas gracias por tu ayuda
Fabian
Bueno fabian, como sabras moodle tiene, en la parte de notifiaciones, el script cron.php con el cual se hace ésto del envío de todos los correos y creo que hace más cosas, pero principalmente sé que sirve para ésto. Yo lo que hice es modificar de la siguiente manera el crontab:
15,30,45 * * * * wget -q -0 /dev/nul http://localhost/moodle/admin/cron.php
Con ésto se envían los correos cada 15 minutos, si lo que quieres es a la media noche, solo modificas los * para dejarlo como quieras (según el post éste).
OJO que debes de haber configurado la parte de correo dentro del moodle en: Administración del sitio/Servidor/Email
Saludos! Espero que te sirva.
PD: Lo siento por la tardanza
Programar ambas copias conel cron, y el fichero ha de estar comprimido.
Realizar una copia de seguridad del directorio /home/tenshi/Documentos con las siguientes caracteristicas:
-Una copia total el dia 27 de cada mes
-Una copia diferencial el resto de dias
como se haria esto?
Bueno, empezaré con respecto a los comandos…
Para hacer el respaldo full del 27, me imagino que puedes hacer:
tar vzf /media/punto-de-respaldo/mi.tar.gz /home/tenshi/Documentos
Esa línea de comando te empaqueta y te comprime tu directorio. Para hacer los respaldos incrementales sería el comando:
tar –update -v -f /home/tenshi/bk/mi.tar /home/tenshi/Documentos
Ésto te creará (la primera vez) un archivo tar con el contenido de tus Documentos (ojo que no va comprimido… por lo que investigué, no permite hacer ésto cuando esta comprimido…), pero lo bonito de éste comando es que, si tu modificas o agregas archivos dentro de tu carpeta -Documentos- y luego ejecutas dicha linea de comando, el comando tar solo enviará los archivos actualizados o nuevos al archivo tar.
Si tu entras al archivo generado .tar, verás que ahí están varias versiones de tu archivo, pero sin embargo, si tu extraes dicho tar te darás cuenta de que te pondrá la última actualización de los archivos.
En síntesis, te podría quedar tu cron de ésta forma:
#Línea 1: Copia diferencia día a día
0 18 * * * tar –update -v -f /home/tenshi/bk/mi.tar /home/tenshi/Documentos
#Línea 2: Copia total el día 27 de cada mes
0 19 27 * * tar vzf /media/punto-de-respaldo/mi.tar.gz /home/tenshi/Documentos
Espero que te sirva ésta información, y hasta me dan ganas de hacer una entrada de blog de ésto porque es muy interesante realizar copias incrementales con tar.
Saludos!
Gracias por la información. Ahora ya puedo hacerme copias de seguridad, porque no es la primera vez que pierdo la info. ^^ enormemente agradecido. si creas alguna entrada con más info estaria encantado de pasarme por ahi. Un saludo y gracias.
skrdz, usted sabría o alguien sabria hacer esto?
-Crear un shell script con un menú de 4 opciones:
1ºCopia total en /tmp/total
2ºCopia incremental en /tmp/incremental
3ºCopia diferencial en /tmp/diferencial
4ºSalir
Características:
La fecha de las copias incremental y diferencial se pasa como parámetro.
Los nombres de los ficheros deben hacer referencia a las fechas de las copias.
Buenas mi duda es si se puede programar sin repeticion.
Es decir solo quiero posponer un exportacion de base de datos a la madrugada de ese día.
Porque si pongo
* 2 * * *
¿lo ejecutara a las 2 de la mñn de todos los dias?
Muchas gracias de antemano
Bueno, cuando pones:
* 2 * * *
Le estas diciendo que ejecutará la(s) instruccion(es) desde las 2 de la madrugada de ése mismo día hasta la eternidad…
Debes de tomar en cuenta que * sirve para especificar todos los valores posibles de una variable, por lo que el primer * esta significando que lo hará en cada minuto que pase y así mismo con las demás variables.
Lo que quieres hacer (programar sin repetición) sería más o menos así:
0 2 11 9 5
Donde las primeras dos variables te indican que se ejecutará a las 2 en punto de la madrugada (0=en punto). 11 significa el día del mes, 9 sería el mes (septiembre) y 5 sería el día viernes, osea éste mismo día que subo éste comentario.
Así solo se ejecutaría una sola vez, aunque tengo una duda… como no se parametriza el año, será que hay posibilidad que se cumpla dicha condición en un futuro? Si alguien conoce la respuesta, que la ponga.
Espero haberte ayudado Paloma (mil años después por cierto jjejeje). Saludos!
hola mira cree un script para realizar un respaldo .sh al ejecutarlo mediante consola si funciona sh respaldo.sh pero la momento de colocarlo en el corn (corontab – e) no pasa nada el editor esta asi:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
HOME=/
# m h dom mon dow command
30 05 * * * sh /home/mantenimiento/cron/respaldo.sh
#
que tengo mal o como puedo comfigurarlo
bueno, creo que hay un error porque estas poniendo 05… debes de quitar el «certo» y dejar el cinco. Te quedaría así:
30 5 * * * sh /home/mantenimiento/cron/respaldo.sh
Pruébalo y me avisas. Si no se soluciona, la cuestión es de permisos pero estoy casi seguro que así solucionas tu problema.
Saludos!
Un saludo foreros muy buenos comentarios y.. buenos post esta info es muy util gracias por compratir
pero bueno al grano les explico mi situación
comenze a trabajar hace poco en administracion de redes en una empresa y.. la cosa es que enrealidad estoy haciendo la practica XD osea que mas trabajo, y lo que me encargaron es poder mandar mail publicitario de la empresa cosa que ya esta solucionado claro que casi muero en el intento XP solucionamos el asunto contratando a una perosona que montara y nos explicara la forma de … montar el servidor y las aplicaciones para el envio, lo que resulto en Instalar ubuntu 9.04 desktop mas servidor Lamp con la aplicacion de interspire mail marketer ver5.6 «NULLED»
(estoy en pos de hacer una guia del proceso de montado y configuracion del sistema y si alguien la quiere me mande un mail y le hago llegar la guia a lo que la termine envien un mp a dark1214519@hotmail.com)
XD
y depues fue un logro poder encontrar un servidor de correo para poder enviar los mail ya que no podia salir con Gmail ni con yahoo ni hotmail por un asunto de tls o autenticación, con tal que encontre un probehedor de mail que me permite hasta el momento salir con la no despresiable cifra de 10000 mail por dia o bueno eso es lo que mandamos en horas de trabajo de 9:00am hasta las 6:30pm (18:30) jejeje
y bueno ya todo funcando y lo demas lo que necesito es poder mandar mas mail por hora por lo que supe la aplicacion soporta 1000 correos por minuto pero con la ventana popup del mismo solo manda aproximadamente 1000 por hora y para poder mandar mássssssss lo tengo que hacer con crontab como podria hacerlo??? o como o de donde podria encontrar una guia para utilizar bien este comando de unix «cron» , «crontab» o como seria su sintaxis no espero que hagan mi trabajo solo quiero un poco de ayuda por que harto dificil que se me ha hecho esto
tube que parender a ocupar linux de la noche a la mañana XD cosa genial por que cada ves amo mas a GNU UNIX/LINUX y bueno tengo poca experiencia en linux pero he aprendido bastante estas ultimas semanas porque yo era wintendero XP pro osea que solo conocia WINTENDO jajajaja por que solo un jugete o para jugar pero para cosas mas cabronas hasta el 2000server 2003server y otros se caen …..
les agradeceria su repuesta y apollo…
Gracias por el saludo y los agradecimientos DarkRenba12145419!
Pues, con respecto a lo de cron… Pues básicamente es relativo a «Tareas programadas» de Windows. crontab es el archivo personalizado por usuario de su cron; Entonces, digitando en una consola crontab -e y, siguiendo el formato que describe ésta entrada de blog, podrás programar una tarea con la hora, tiempo y frecuencia que quieras. No entendí específicamente qué es lo que quieres ejecutar… pero si lo que necesitas es correr una página por Internet (con ciertos parámetros GET) podrías utilizar un comando parecido a éste:
wget -q -O /dev/null http://www.sitio-web.com/ubicacion/programa-en-web.php?parametro1=valor1¶metro2=valor2
por lo que tu crontab podría quedar algo así…
0,15,30,45 * * * * wget -q -O /dev/null http://www.sitio-web.com/ubicacion/programa-en-web.php?parametro1=valor1¶metro2=valor2
Será algo así lo que quieres hacer?
Con respecto a la guía que harás, avisanos cuando ya tengas hecha y me gustaría mucho tenerla y probarlo.
Saludos!!!
bueno gracias por la respuesta pronta
si quieres ver como funciona la cosa y … el programa funcionando mandame un mail pribado a
dark1214519@hotmail.com para pasarte mi direccion y acordar para habilitarte un usuario y pass para que veas el interspire email marketer y te explico algunos detalles de funcionamiento por que dentro de sus funciones tiene integrado parametros cron y acceso php en fin algo que no entiendo muy bien hasta el momento
bueno bueno lo que necesito es
levantar mi propio servidor smtp
que necesito
tengo ip publica pero no tengo dominio
tengo ubutnu 9.04 destop funcionando como server Lamp
apache mysql php y sies que algun otro servicio no lorecuerdo XD
por fabor help me!!!
la guia esta en proceso .. me va a demorar mas de lo que crei por que la estoy haciendo con todos los pasos osea desde cero
instalando el sistema operativo
los servicios
Lamp
aplicaciones web «phpmyadmin» «interspire email marketer»
lo mas importante que aun no logro hacer funcar servidor smtp interno (ocupo uno externo y no me dan servicio de envio en masa XD)
y por supuesto como extra una guia de como utilizar el interspire email marketer todo esto con sus aplicaciones en una archivo RAR o los link de donde pueden sacar la info pliss ayudaaaa
Necesito saber como montar el smtp
y utlizar cron para enviar mail por esta aplicacion «interspire email marketer» que tiene soporte php
hmmm.