¿Por qué solo funciona un comando wget en mi crontab?

15

Deseo obtener contenido de un script PHP en mi servidor dos veces al día, alterando una variable de consulta langpara establecer el idioma que queremos y guardar este contenido en archivos de dos idiomas específicos. Este es mi crontab:

*/15 * * * * ~root/apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

El problema es que solo se está ejecutando la primera línea de comando wget (o para ser precisos: el único archivo que se está escribiendo es /path/to/file-sv.sql). Si cambio la segunda y la tercera fila, /path/to/file-en.sqlse escribe en su lugar. La primera línea siempre se ejecuta como se esperaba, sin importar dónde se encuentre.

Luego intenté usar lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlen vano; todavía solo la primera línea de lince se ejecutó correctamente. ¡Incluso mezclar wget y lynx no cambió esto!

¡Estoy un poco desesperado! ¿Me estoy perdiendo de algo? Hay miles de artículos sobre crontab (combinado con) wget o lynx, pero todos parecen cubrir configuraciones básicas y sintaxis. ¿Alguien tiene idea de lo que estoy haciendo mal?

Gracias
alexander

Alexander Wallin
fuente
¿Está seguro de que cada vez que accede a mydomain.com/path/?lang=en se devuelve algo? ¿Has probado esto desde una línea de comando para ver qué sucede (wget -O - mydomain.com/path/?lang=en )?
Torian
1
Intentaría borrar y recrear el retorno de carro entre 2 y 3.
Antonius Bloch
La mejor práctica es especificar la ruta completa a los ejecutables en crontab. Me gusta: "/ usr / bin / wget". No creo que esto ayude en su caso, ya que uno de los crons funciona.
Antonius Bloch
¿Qué se muestra en el registro de cron cuando esto sucede?
frijoles
@ Torian: funciona como un encanto.
Alexander Wallin

Respuestas:

42

Intente agregar nueva línea al final de su crontab.

gelraen
fuente
1
Eres un regalo del cielo! Eso lo hizo! Te votaría si tuviera la reputación. :)
Alexander Wallin
1
@gelraen Pero ... ¿por qué?
Samuel
2

Hay algo en el texto que está mal. Edite su crontab en vim y luego muestre caracteres invisibles.

:set invlist

Debería poder ver y luego corregirlo.

bahamat
fuente
¿Cómo mal? ¿Cómo lo edito en Vim? Traté de reescribir todo el archivo en caso de que copiar y pegar pudiera causar problemas.
Alexander Wallin
@afEkenholm: ¿cómo lo editas ahora?
bahamat
1
@bahamat:# crontab -e
Alexander Wallin
@afEkenholm: haz esto:EDITOR=vim crontab -e
bahamat
@bahamat: Todo se ve bien. ¿Tienes un morado $al final de cada línea?
Alexander Wallin
1

Intente agregar redireccionamiento, para depurar crontab (o leer el correo raíz):

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

También ejecute 'wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=en "' desde la consola.

También use 'crontab -e' para validar el nuevo crontab.

Además, intente eliminar la línea que no funciona y vuelva a escribirla desde el teclado.

Copia de seguridad de corntab y comando de ejecución:

crontab -l | crontab -
alvosu
fuente
Agregar /tmp/crontab_ouptput 2> /tmp/crontab_errorsolo funciona para la primera línea. Ejecutar el comando desde la consola funciona bien. Reescribí todo el archivo con mis propias manos, pero nada cambió.
Alexander Wallin
Haga una copia de seguridad de crontab e intente: crontab -l | crontab -
alvosu 02 de
Gracias por los esfuerzos, @alvosu, ¡pero una nueva línea simple funcionó!
Alexander Wallin
1

Acabo de pasar un tiempo probando las respuestas anteriores (agregando nuevas líneas, eliminando nuevas líneas, etc.) en un sistema que ejecuta cronie . Finalmente se encontró que hay un error en cronie 1.5.3 que solo ejecuta el primer trabajo cron para cada usuario . Está arreglado en 1.5.4

https://github.com/cronie-crond/cronie/issues/30

Espero que esto ahorre algo de tiempo ...

Jeroen
fuente