En el pasado, en los sistemas Linux, he podido truncar archivos de registro grandes y abiertos (es decir, un archivo en el que un proceso está escribiendo activamente) usando cat /dev/null > file.log
.
Sin embargo, en 10.9 (Mavericks), ese no parece ser el caso. Tengo un archivo de 11GB que está siendo registrado por una aplicación, pero cuando ejecuto el mismo comando con dicho archivo, parece que no pasa nada.
Cuando intento esto en un archivo de tamaño trivial, funciona.
Aqui esta ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
También he tratado cp /dev/null file.log
en vano.
Pensando que podría aprovechar la función truncada ( man 2 truncate
en Darwin), compilé esto y lo ejecuté contra dos archivos, uno de tamaño trivial y el otro el archivo de registro real. Nuevamente, funcionó contra el archivo trivial y no funcionó en el registro mucho más grande.
/*
* Copyright (c) 2013 Thomas de Grivel <thomas@lowh.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
...
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <unistd.h>
int main (int argc, const char **argv)
{
int e = 0;
while (--argc) {
argv++;
if (truncate(*argv, 0)) {
e = 4;
warn("%s", *argv);
}
}
return e;
}
El proceso regresa 0
independientemente del archivo que use.
du -h /tmp/file.log
resultados en11G /tmp/file.log
du
odu -h
dice? ¿Es posible que el archivo sea escaso?