Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

169
Views
¿Cambiar el nombre es una forma segura de bloquear archivos?

Estoy en proceso de reescribir una aplicación PHP para node.js.

Uno de los componentes consiste en analizar un registro de servidor web en vivo, usar la información y luego escribir parte de ella en el registro.

Bloqueo el archivo para evitar sobrescrituras (con más de 100 entradas/segundo en producción y análisis cada hora más o menos, suceden con bastante frecuencia sin el bloqueo) así:

 $fh = fopen('./my.log', 'r'); flock($fh, LOCK_EX); // parse the content, remove old entries, rewrite back the newer ones flock($fh, LOCK_UN); fclose($fh);

Con el fs del nodo, entiendo que no hay una forma nativa de bloquear los archivos . Seguramente hay bibliotecas , pero mi primer intento fue probar algo como esto:

 fs.renameSync('./my.log','./my.log_') // rename the file to something else fs.writeFileSync('./my.log_', info_to_keep, {flag: 'w+'}) // safely(!?) replace the content fs.renameSync('./my.log_','./my.log') // rename back // (would be done async in production, this is for quick testing only)

Parece hacer el trabajo. Incluso si el my.log original se recrea en esos pocos milisegundos, sería bien reemplazado (¡no me importan los bits de datos perdidos! - todo es transitorio y se usa con fines de muestreo).

Sin embargo, no pude probar esto en vivo, así que no estoy seguro de si funcionaría de manera confiable. ¿Hay algún riesgo involucrado, como colisiones incluso durante el proceso de cambio de nombre, o algo así?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Bueno, de acuerdo con algunos documentos de nginx (consulte la sección "Rotación de registros"), nginx mantiene abierto el archivo de registro, de modo que cuando le cambia el nombre, nginx sigue escribiendo en el mismo descriptor de archivo que tenía, que ahora es el archivo renombrado. Hasta que lo señale, no creará un nuevo archivo. Por lo tanto, cambiar el nombre del archivo de registro no le hará nada a nginx. De acuerdo con eso, simplemente seguirá escribiendo en el archivo renombrado.

Entonces, supongo que la respuesta a "¿Cambiar el nombre es una forma segura de bloquear archivos?" para nginx es "No" . No bloquea nada.

over 4 years ago · Santiago Trujillo Report

0

En palabras simples: el proceso de Linux no se preocupa por el nombre del archivo después de que el proceso haya abierto el archivo. El controlador de archivos retendría una dirección para el archivo en el disco y la usaría para operaciones de E/S. Ahora, si algo sucede con el nombre mientras se abre el archivo, no afecta los procesos que ya abrieron el controlador. Además, incluso el espacio físico no se desasigna hasta que todos los procesos cierran los identificadores para archivar. Lo que significa que incluso puede eliminar el archivo usando rm , pero mientras el programa lea/escriba en el archivo, los datos se mantendrán en buen estado. Esa es la base del mecanismo de rotación de registros de NGinx por cierto.

Aquí hay un buen artículo sobre los conceptos básicos de la operación del sistema de archivos Linux y los controladores de archivos obsoletos: https://www.baeldung.com/linux/stale-file-handles

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!