Continúa monitoreando el server web y descarga los files recién agregados

¿Cuál es la mejor manera de monitorear continuamente un server web (HTTP) y download el file recién agregado con mín. retraso (idealmente <1min. de retraso)?

Supervisión

En primer lugar, para el monitoreo, le recomiendo que use Nagios , la fuente principal es gratuita, pero si necesita una GUI, debe pagarla, pero vale la pena pagar tanto.

También puede usar Icinga , PRTG o lo que más le convenga.

Collectd (Collection Daemon) es también una herramienta de monitoreo gratuita que puedes download usando yum en derivados de RHEL o apt-get en los basados ​​en Debian. Puede leer este documento si quiere ir con Collectd.

Tarea ejecutando cada x <1 minuto

Para la segunda parte de su pregunta, para hacer un trabajo cada x vez, donde la x es less de un minuto periódicamente, ya que sabe que no puede usar Cronjobs, ya que puede usar algunos trucos explicados por Gilles en esta pregunta para hacer lo que querer.

Será mejor tener un script para lo que necesita y ejecutarlo para siempre, incluso en el arranque si es necesario. Puede tener una syntax simple como se muestra a continuación:

 while true; do yourJob; sleep someTime; done 

O incluso puede ir con algunos scripts más complejos según lo que necesite.

También puedes usar el command de watch . Por ejemplo:

 watch -n1 command 

Ejecutará tu command cada segundo y para siempre.

Como habrás adivinado, también puedes ejecutar tu script de shell con watch si necesitas tener solo un script simple ejecutando cada x time less de un minuto, y no uno complejo.

La elección es suya, espero que esto ayude.

Esto depende de un par de factores.

Si tiene control en el server web, lo más fácil sería instalar un service (RESTful?) Que proporcione la cantidad de files modificados desde la última comprobación o descarga. Esto minimiza la transferencia de datos y la carga tanto en el cliente como en el server. Aún más si la carga / modificación de files en el server se puede rastrear directamente, por ejemplo, en el script de carga en lugar de confiar en el sistema de files.

Si es lo último, searchía alguna solución de monitoreo de files como famd .

Si no tiene control en el server, entonces debe get modificaciones antes de poder downloadlas. Lo más fácil sería usar alguna utilidad de creación de reflections web como w3mir, ya que ellos ya se encargan de verificar / suministrar ETag y los encabezados Last-Modified / If-Modified-Since. Esto significa que tendrá que emitir less llamadas y, por lo tanto, podrá ejecutar la utilidad con más frecuencia.

En cuanto a cómo ejecutar la utilidad, depende de dónde se ejecuta. Puede usar un trabajo cron en una máquina Unix o simplemente ejecutarlo en un bucle.

Sin embargo, si hace lo primero, le aconsejamos que instale algún tipo de semáforo para evitar que se inicie un process de duplicación antes de que la instancia anterior haya finalizado. Puede ser tan simple como crear un file de locking:

 if [ -r /tmp/mirror.lock ]; then echo "lock file found" | logger -t webmirror exit 0 fi touch /tmp/mirror.lock ...whatever... rm /tmp/mirror.lock 

Pero también tendrá que catch cualquier señal que pueda matar su script, de lo contrario, en caso de un error temporal, el file de locking podría quedar allí y evitar que todas las instancias adicionales se ejecuten incluso después de que se haya resuelto el error.

O bien, puede verificar que el file de locking no sea anterior a una cantidad razonable, y eliminarlo si es así, o verificar cuántas instancias del script se encuentran por ps (normalmente una, la actual; si es más, la actual tenía mejor abortar), y prescinde del file de locking por completo.

Puede hacer un command curl simple en un trabajo cron, pero le recomiendo que comience a usar una solución de monitoreo con capacidades de monitoreo web. Hay muchos de ellos gratis, solo google "soluciones de monitoreo web de código abierto" y obtendrá muchos de ellos!

Si realmente está buscando files, puede hacer la request HEAD en la URL y el server debe devolver una key (el 'etag') que le dirá si el file ha cambiado. En un server Apache esto se basa en el time de ctime del file, por lo que el etag puede cambiar incluso si el file no lo hizo.

Pero dado que es probable que la networking me resulte más costoso que escribir en un disco si descarga el contenido del file, también podría savelo en el disco.

Usted no dice cuántos files o qué tan grandes son. Si hay una gran cantidad de files o files que demoran mucho time en download este script o si desea colocar una cantidad mínima de carga en el server, este script debe cambiarse para que cada consulta se realice una vez por minuto o con la frecuencia como sea posible si la descarga lleva más de un minuto.

A continuación se muestra un script de Ruby muy simple que hará lo que yo quiera:

#! / usr / bin / env ruby

 require 'getoptlong' require 'net/https' require 'json' require 'fileutils' def main(roots, **options) cache = Hash.new cache = Hash.new ok = true path = options[:path] while (ok) roots.each do |root| uri = URI.parse(root) http = Net::HTTP.new(uri.host, uri.port) case uri.scheme when 'https' http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE when 'http' else raise "unknow type #{uri.to_s}" end need_get = true if (c = cache[uri.request_uri]) response = http.request(Net::HTTP::Head.new(uri.request_uri)) if response.code.to_i == 200 if response['etag'] == c['etag'] need_get = false end end end if need_get response = http.request(Net::HTTP::Get.new(uri.request_uri)) cache[uri.request_uri] = { 'etag' => response['etag'] } filename = File.join(path, uri.request_uri) need_write = true if File.exist?(filename) # you could check if the file changed here, but it does not save you much. end if need_write File.open(filename, 'w') { |file| file.write(response.body) } end end end sleep 30 end end begin main([http://example.com/ten.html, http://example.com/eleven], { path: "/tmp/downloaded_files" }) rescue => error puts error end 

Como FarazX dijo que hay varias soluciones de monitoreo como Nagios, Pandora FMS , … Pero tal vez estas herramientas son demasiado grandes para su propósito. Quizás Uptimerobot es suficiente para ti.

Eche un vistazo a las propuestas y elija las mejores para usted, pero tenga en count que una solución de monitoreo con más opciones le brinda más posibilidades para su entorno.