Re: [suse-linux-s] Ejecutar programa con cron (Solucionado)
Hola Luis: --- "Luis Roa P." escribió:
Lo que debes hacer es lo siguiente:
1.- Crea un script que ejecute tu programa y lo pruebas desde tu terminal en forma normal.
Lo llamé rutina.sh
2.- Ese script debe contener al menos lo siguiente: #!/bin/bash export TERM=linux ejecucion_programa
Puedes reemplazar linux por el tipo de terminal que estes utilizando, a cron le bastara con que la variable TERM tenga un valor definido que sea correcto
Quedó así: #!/bin/bash export TERM=linux cd /home/usuario/descargas /usr/bin/programa -opciones 2> /dev/tty8 > /dev/tty8. Lo del valor de TERM, no lo cambié, pues no estoy claro a lo que se refiere.
3.- Suponiendo que tu script se llama progcron.sh por ejemplo, debes dejarlo con permisos de ejecucion, sugiero 755 (rwxr-xr-x) y lo ejecutas interactivamente solo para probarlo. Si comienza a desplegar texto por la pantalla, se debe a una o ambas de las siguientes razones: - Tu programa emite despliegues de data por la pantalla a traves de la salida standard - Tienes mensajes de error en la ejecucion, los cuales salen por la salida de errores
El programa se ejecuta perfectamente en la consola virtual 8. Hay salida en pantalla pero bueno, eso es parte del programa en sí. Así que creo que eso significa: Cero errores.
4.- Si tienes salida, ya sea standard y/o de errores, entonces debes considerar eso para ejecutar en el cron tu aplicacion.
Supongo que te referías a corregir errores, si llegaran a presentarse; pasé de ésto.
5.- Programa en el cron, la ejecucion _del_script_, el cual tu previamente habras dotado de las variables de ambiente que necesita (como TERM por ejemplo) Si hay que considerar salida, solamente la rediriges como te sea mas util, ejemplos:
30 5 * * * /directorio_path/progcron.sh 2>&1 > /dev/null #Perderas lo que salga 30 5 * * * /directorio_path/progcron.sh 2>&1 > archivo.testigo.txt #Grabaras la salida en archivo.testigo.txt
Quedó de la siguiente manera: 0 * * * * /home/usuario/rutina.sh
Si tu problema actual fuese solamente que te esta reclamando por no haber definido alguna variable de ambiente, basta con que lo hagas en el archivo de cron, en la forma:
TERM=linux MAILTO=tu_cuenta_de_email OTRAVARIABLE=contenido_de_otra_variable Luego puedes ejecutar directamente tu programa, considerando lo ya mencionado respecto a redireccionar la(s) salida(s)
De ésta parte no hice uso de nada (Creo que ya todo estaba definido en la rutina expuesta párrafos arriba) Lo coloqué a ejecutarse cada hora, para que en caso de que la máquina se apague/sea reiniciada, el programa vuelva a ejecutarse sin necesidad de intervención humana. Una pregunta final (Ya que casi todo está resuelto): cómo podría hacer que en lugar de ejecutarse cada hora (Como lo coloqué actualmente), se ejecutara cada vez que la máquina se encendiera/reiniciara ?. Muchas gracias a Luis Roa, Carlos Robin, Víctor (No recuerdo su apellido, en éste instante) y otr@s colister@s que me tuvieron paciencia, sacaron parte de su tiempo y actividades para colaborarme y darme indicaciones muy útiles y explicadas de manera sencilla/práctica. Presento mis disculpas, si he olvidado mencionar a alguien que me hubiera colaborado en alguna ocasión/de alguna forma, para llevar a cabo éste ensayo. Lamento mucho que haya desadaptados, que no entienden con qué fin está constituída ésta lista de correo electrónico y que por otra parte, no tengan el menor respeto por el buen uso del idioma, la dignidad y las diferencias (De nacionalidad y puntos de vista) de las personas que, de una u otra forma participamos en ésta lista de correo electrónico. Disculpen las molestias. Cordialmente, Cuervo Linuxero EL CAMBIO ES LA CLAVE DE LA EVOLUCION; USA GNU LINUX: LA EVOLUCION DE LA INFORMATICA Y DE TUS CAPACIDADES. _________________________________________________________ Do You Yahoo!? Información de Estados Unidos y América Latina, en Yahoo! Noticias. Visítanos en http://noticias.espanol.yahoo.com
Max Draven escribió:
Quedó así:
#!/bin/bash export TERM=linux cd /home/usuario/descargas /usr/bin/programa -opciones 2> /dev/tty8 > /dev/tty8.
Lo del valor de TERM, no lo cambié, pues no estoy claro a lo que se refiere.
Cada consola debe tener definido un tipo de terminal, que define la relacion entre las caracteristicas fisicas que el terminal maneja y las definiciones asociadas que manejara el SO. Por defecto, vienen como TERM=linux, pero si eventualmente conectaras otro tipo de terminal, debes ajustar el valor de esa variable a lo que corresponda (TERM=ansi, TERM=vt100, etc...)
El programa se ejecuta perfectamente en la consola virtual 8. Hay salida en pantalla pero bueno, eso es parte del programa en sí. Así que creo que eso significa: Cero errores.
El programa _no_se_esta_ejecutando_ en la consola virtual 8, se esta ejecutando en _background_ y esta rediccionando su(s) salida(s) hacia el tty8
<> Supongo que te referías a corregir errores, si llegaran a presentarse; pasé de ésto.
Nunca se sabe, porque los eventuales errores pueden tener _n_ causas diferentes, algunas de las cuales ni siquiera se te va a acurrir preveer, como por ejemplo, problemas fisicos de disco, archivos corruptos, falta de espacio para grabar, etc, etc Te sugiero que el redireccionamiento lo hagas hacia un archivo de texto : 1.- Elimina el redireccionamiento en el script 2.- Agrega el redireccionamiento en el cron : 0 * * * * /home/usuario/rutina.sh 2>&1 > log.rutina
<>
Quedó de la siguiente manera:
0 * * * * /home/usuario/rutina.sh
Lo coloqué a ejecutarse cada hora, para que en caso de que la máquina se apague/sea reiniciada, el programa vuelva a ejecutarse sin necesidad de intervención humana.
Una pregunta final (Ya que casi todo está resuelto): cómo podría hacer que en lugar de ejecutarse cada hora (Como lo coloqué actualmente), se ejecutara cada vez que la máquina se encendiera/reiniciara ?.
Si lo vas a ejecutar cada hora, encuentro innecesario que te preocupes de que lo haga al iniciar la máquina. En todo caso, leete el man cron, y el man crontab, y encontraras una forma de hacerlo. Busca @reboot
Cuervo Linuxero
Saludos LRP
participants (2)
-
Luis Roa P.
-
Max Draven