Ejecuto el siguiente comando cada 5 minutos en mi crontab para mantener vivo a Phusion Passenger.
*/5 * * * * wget mysite.com > /dev/null 2>&1
Cuando ejecuto esto, realiza un wget en las rutas de URL del sitio STDOUT / STDERR a / dev / null. Cuando ejecuto esto desde una línea de comandos, funciona bien y no produce un archivo index.html en mi directorio de inicio.
Cuando se ejecuta desde cron, crea un nuevo archivo index.html cada cinco minutos, dejándome con una tonelada de archivos de índice que no quiero.
¿Mi sintaxis es incorrecta para ejecutar el trabajo cron? Desde una línea de comandos funciona sin problemas, pero desde cron genera un archivo index.html en mi directorio de inicio.
Estoy seguro de que estoy cometiendo un simple error, agradecería si alguien pudiera ayudar.
wget
desde un terminal y de lo contrario es si se muestra una barra de progreso.Respuestas:
Podrías hacerlo así:
Aquí
-O
envía el archivo descargado/dev/null
y-o
registra en/dev/null
lugar de stderr. De esa manera, la redirección no es necesaria en absoluto.fuente
¿Necesita descargar realmente el contenido o simplemente recibir el 200 OK? Si solo tiene que hacer que el servidor procese la solicitud, ¿por qué no simplemente usar el
--spider
argumento?fuente
Yo usaría lo siguiente:
La
-O -
opción asegura que el contenido obtenido se envíe a stdout.fuente
foo > /dev/null 2>&1
se escribe de manera más concisa comofoo &> /dev/null
.bash
. Ensh
, que normalmente es lo que usa cron, el ampersand redirect no funciona.Dices que solo necesitas la respuesta "200 OK" en un comentario.
Eso permite una solución con algunas ventajas adicionales sobre las de
wget -O /dev/null -o /dev/null example.com
. La idea no es descartar la salida de alguna manera, pero no crear ninguna salida en absoluto.Que solo necesita la respuesta significa que los datos que se descargan en el archivo local index.html no necesitan descargarse en primer lugar.
En el protocolo HTTP, el comando 'GET' se usa para descargar un documento . Para acceder a un documento de una manera que hace todo excepto descargar el documento, hay un comando especial 'HEAD'.
Cuando se usa 'GET' para esta tarea, el documento se descarga y se descarta localmente. Usar 'HEAD' hace exactamente lo que necesita, no transfiere el documento en primer lugar. Siempre devolverá el mismo código de resultado que 'GET', por definición.
La sintaxis para utilizar el método
HEAD
conwget
es un poco extraño: tenemos que utilizar la opción--spider
. En este contexto, simplemente hace lo que queremos: acceder a la URL con 'HEAD' en lugar de 'GET'.Podemos usar la opción
-q
(silencioso) para quewget
no se muestren detalles sobre lo que hace.Combinando eso,
wget
no generará nada en stderr ni guardará un documento.wget -q --spider 'http://example.com/'
El código de salida nos dice si la solicitud fue exitosa o no:
Para un comando en
crontab
, el hecho de que no haya salida en ambos casos significa que puede usar no obtener salida como una indicación de errores nuevamente.Su comando de ejemplo se cambiaría a esto:
Esto tiene las mismas ventajas que
wget -O /dev/null -o /dev/null example.com
. La ventaja adicional es que la salida del registro y la salida del documento no se generan, en lugar de generarse y descartarse localmente. O, por supuesto, la gran diferencia es evitar descargar y luego descartar el documentoindex.html
.fuente
Que su pregunta sea sobre esto, la página web dice:
Esto no debería requerir ningún script de keepalive.
De lo contrario, la solución de Kasperd es perfecta.
fuente
wget
comandos mantienen con vida . En muchas situaciones, la necesidad de mantener los mensajes vivos es un síntoma de un defecto de diseño subyacente que debe corregirse. Pero incluso si todo eso se soluciona, aún quedarán algunos casos en los que un mensaje de mantener vivo es la solución correcta. Incluso si no se necesitan mensajes vivos, el trabajo cron podría ser una parte útil de una configuración de monitoreo.