PDA

Ver la Versión Completa : Ayuda: hacer que un script se ejecute sólo una vez al día



J_VM
10-mar-2014, 12:11
Hola,

Llevo un tiempo queriendo hacer un script en bash que me ayude a realizar una tarea 1 vez al día. Os explico mi problema:

Lo que quiero es generarme un ebook de feeds con el programa calibre y mandarmelo por email al kindle. Eso lo consigo hacer bien, pero claro, quiero que me genere 1 ebook al día, dándome igual la hora (cuando encienda el ordenador). Pero en crontab no soy capaz de decirle que lo haga solo una vez por día, sino que tienes que ponerle a qué hora quieres que se ejecute. Pero claro, como yo tenga el ordenador apagado a esa hora, ya ese día no me lo manda.

Me busqué un poco la vida e hice este script y puse en crontab que se ejecute cada vez que enciendo el ordenador:



#!/bin/bash
cd [directorio donde está el script]
read -N 8 fecha < HOY.txt
if [ $fecha != $(date +%Y%m%d) ]; then
rm HOY.txt
fecha=$(date +%Y%m%d)
echo $fecha >> HOY.txt
ebook-convert [directorio de la receta de CALIBRE] [Directorio donde guardo el ebook]/HOY.mobi
calibre-smtp -a [Directorio donde guardo el ebook]/HOY.mobi ******@***.com *********@free.kindle.com ""

fi

Sin embargo, en el kindle recibo el ebook varias veces (dos o tres), y no sé por qué. La idea del script es que compare con el contenido del archivo txt el día, y si es distinto del día actual, entonces borra el txt y lo crea con la fecha actual, y hace el ebook y lo manda. Mientras esté en el mismo día no hace nada. ¿Dónde creeis que está mi error?

Muchas gracias

maniat1k
10-mar-2014, 14:55
Agrega como lo pusiste en el crontab. Y fíjate si en verdad corre una vez sola el crontab. ( cat /var/log/messages | grep crontab )

saludos!

J_VM
10-mar-2014, 17:51
Cuando escribo ese código, cat /var/log/messages | grep crontab no me sale nada, como si no hubiera de crontab en var/log/messages.

En crontab puse "Activar esta tarea" y "Ejecutar al iniciar el sistema". La idea es que si he encendido el ordenador varias veces con el script que hice no debería volverse a crear el ebook y mandarlo por correo...

Curiosamente las fechas de envío son de 10 minutos de difierencia y cosa así, así que no es porque lo haya encendido varias veces en el día..

maniat1k
10-mar-2014, 18:32
Cuando escribo ese código, cat /var/log/messages | grep crontab no me sale nada, como si no hubiera de crontab en var/log/messages.

En crontab puse "Activar esta tarea" y "Ejecutar al iniciar el sistema". La idea es que si he encendido el ordenador varias veces con el script que hice no debería volverse a crear el ebook y mandarlo por correo...

Curiosamente las fechas de envío son de 10 minutos de difierencia y cosa así, así que no es porque lo haya encendido varias veces en el día..

Lo que te decía era ver como estaba anotado el script en el crontab...

si pones crontab -l ¿que aparece?

como por ejemplo:


crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.NpiHo0 installed on Wed Jan 29 09:24:18 2014)
# (Cronie version 4.2)

0 1 * * * /root/bin/script01
0 1 * * * /root/bin/script02
0 2 10 * * /root/bin/script03
30 2 10 * * /root/bin/script04



... no entiendo como editas el crontab... yo lo hago por consola: como root pongo crontab -e

leete esto: http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/


saludos!

J_VM
11-mar-2014, 00:51
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/kde-javier/kcmshellJH8959.tmp installed on Fri Jan 17 18:42:46 2014)
# (Cronie version 4.2)
#Crea el periodico HOY para mi Kindle
@reboot "/home/javier/Biblioteca de calibre/HOY"

#Crea mis noticias RSS sobre FÃ*sica para mi Kindle
@reboot "/home/javier/Biblioteca de calibre/Fisica"


# Archivo generado con KCron el Viernes, 17 de enero de 2014 18:42.


Perdona, esa es la salida. Gracias por el link, parece una web con muchos consejos / trucos sobre linux! pero para lo del crontab creo que no me ayuda, ya que el @daily lo que hace es ejecutarse a las 12 de la noche y si a esa hora no tengo encendido el ordenador entonces no se ejecuta...