Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 6 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Mié Sep 16, 2009 11:00 pm
Mensajes: 3

Nota Publicado: Jue Sep 17, 2009 6:54 am 
Arriba  
Buenos dias, como estan todos,

Si alguien pudiera ayudarme por favor, tengo un archivo .sh que se tiene q ejecutar automaticamente cada dia a las 3 de la mañana para verificar si existen contratos vigentes de lo contrario darlos de baja, el problema es que el script funciona perfectamente pero el cron de mi servidor jamas lo ejecuta (utilizo debian) alguien me puede ayudar?????

El codigo que utilizo en el /etc/crontab es el siguiente:

0 3 * * * root /<ruta del archivo .sh>

Gracias

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Jue Sep 17, 2009 8:04 am 
Arriba  
Lo que puede pasar es que el comando se ejecute pero no veas ningún resultado.
Por ejemplo, si pones como comando "ls" (o su ruta) te lo va a ejecutar, pero el resultado del ls es posible que vaya a otro terminal, o simplemente se pierda el resultado.

Lo que puedes hacer es poner un comando como:
Código:
ruta-al-script && touch /tmp/comando_ejecutado

Con esto lo que haces que, si se ejecuta correctamente el script (creo que debe devolver un 0) se cree un archivo en el directorio tmp, o actualice datos de ese archivo (fecha de acceso, generealmente)

Otra opción es volcar el resultado a un fichero (creo que es así):
Código:
ruta-al-script > /tmp/archivo 2> &1

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Mié Sep 16, 2009 11:00 pm
Mensajes: 3

Nota Publicado: Vie Nov 20, 2009 7:07 am 
Arriba  
hola:
Mil disculpas por la demora, pero deje el tema del crontab para el final de mi progrma y ahora cuando termine hice la prueba colocando las lineas de comando que me dijiste pero el fichero que crea esta vacio, si ejecuto el script desde consola funciona perfectamente pero desde el crontab no, hice la prueba en ubuntu y funciona pero el problema es q mi servidor es debian y es ahi donde tiene q funcionar, por alguna razon la sentencia sql no se ejecuta, o es q me falta algo???

Aqui les dejo el codigo

PGUSER=web
export PGUSER
PGPASSWORD=t1t1
export PGPASSWORD
psql -d base -c 'select * from pruebacron()';

este es el codigo de una pequeña prueba q realizo, la funcion pruebacron() lo unco que hace es cambar el estado del personal de TRUE a FALSE.

Me podrias indicar por favor si es q estoy olvidando algo? porq en Ubuntu funciona y en debian no??

Desde el crontab estoy llamando de la siguiente manera:

0 3 * * * root /var/www/prueba.sh > prueba.txt

El archivo prueba.txt se crea pero esta vacio.


De Atenamno Muchisimas gracias

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Vie Nov 20, 2009 9:54 am 
Arriba  
Código:
psql -d base -c 'select * from pruebacron()';

¿Esto está bien? El caracter ";" debería ir dentro de la consulta sql ¿no?

De todas formas, convendría que también volcaras la salida de error, ya que si hay algún problema seguramente te encuentres con el archivo vacia

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Mié Sep 16, 2009 11:00 pm
Mensajes: 3

Nota Publicado: Vie Nov 20, 2009 10:47 am 
Arriba  
hola de nuevo,

La verdad soy nueva en linux y hasta ahora trabaje con Ubuntu sin mucho problema, todo corre en ubuntu pero a la hora de probar en el servidor (q esta en debian) tengo problemas, cambie el ; y de todas maneras no pasa nada, me crea el archivo al q estoy direccionando la respuesta pero esta vacio, no ejecuta los comandos postgres, intente colocarlos directamente en el crontab de la siguiente manera

0 3 * * * root psql base < /var/www/comandos.sql

para q ejecute ese archivo como sql pero nada, la verdad no se si me falta habilitar algo en debian o en q estoy fallando, pero como t digo el crontab de debian no interpreta ningun comando postgres.
Crei q el problema era q ejecutaba el sh llegaba a la linea de comando postgres, es decir al plsql y debaja q el postgres se encargue y por eso no hacia nada, entonces hice lo siguiente:

<archivo sh>

psql base > /var/www/comandos.txt

<archivo comandos.txt>
SELECT * FROM pruebacron();

<crontab>

0 3 * * * root /var/www/prueba.sh > resultado.txt

pero ni asi ejecuta los comandos postgres

Alguna idea??

ya probe todo, solo se me ocurre q falta algo en el debian o como puedo ejecutar desde el crontab sentencias de postgres?


Gracias :(

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Dic 16, 2010 1:11 pm
Mensajes: 1

Nota Publicado: Jue Dic 16, 2010 1:36 pm 
Arriba  
Algo tarde esta respuesta.

Es muy importante aclarar que para poder ejecutar un query desde un crontab, deben darle permisos a los archivos .sh y .log al usuario postgres dueño de la base de datos donde se va a ejecutar la consulta, tambien el crontab tiene que ser desde el usuario postgres, si se ejecuta desde el crontab del root es imposible que se ejecute la función. En caso de ser una función de postgres, el valor retorno de la misma es la que se va a imprimir en nuestro log. Les dejo un ejemplo del .sh y del contrab (ojo: elaborado en debian para querys con postgresql)

Supongamos que tenemos que crear el archivo .sh y .log dentro de la ruta /var/lib/cron
$su
#nano /var/lib/cron/prueba.log
#nano /var/lib/cron/prueba.sh

Ahora editemos prueba.sh

Ejemplo: prueba.sh
#Nombre de la Base de datos = pruebadb
#Usuario de la Base de datos = postgres
psql -d pruebadb -c 'SELECT f_encuesta_cerrar();' >> /var/lib/cron/prueba.log
#Salvamos los cambios y volvemos al terminal
#fin

Ahora debemos configurar nuestro crontab -e pero el del usuario de la base de datos, en este caso usaremos el de postgres

#su postgres
postgres@server: crontab -e

Aqui estamos entrado al crontab del usuario postgres, ahora agregemos nuestra linea de código para la ejecución del crontab

Ejemplo: crontab -e

# m h dom mon dow command
00 3 * * * /var/lib/psql/cron/prueba.sh
#fin

El cron se ejecutará todos los dias a las 3:00am, para comprobar que la función retorna al valor deseado, deben de consultar prueba.log donde se visualizará el valor retorno de la función. En mi caso, la función con que yo estoy haciendo el cron retorna lo siguiente:
RETURN 'Se realizó los insert del dia '||to_char(now()::date,'dd/mm/yyyy');

En nuestro archivo prueba.log aparecerá lo siguiente:

f_encuesta_cerrar
-------------------------------------------------------
Se realizó los insert del dia 01/02/2010 03:00:02
(1 fila)

f_encuesta_cerrar
-------------------------------------------------------
Se realizó los insert del dia 02/02/2010 03:00:02
(1 fila)

f_encuesta_cerrar
-------------------------------------------------------
Se realizó los insert del dia 03/02/2010 03:00:02
(1 fila)

f_encuesta_cerrar
-------------------------------------------------------
Se realizó los insert del dia 04/02/2010 03:00:02

Espero que haya sido de mucha ayuda.
Saludos.

 Perfil Email  
Mostrar mensajes previos:  Ordenar por  
 [ 6 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO