¿Alguien puede darme una solución para truncar todos los archivos de registro en el /var/log/
directorio?
y una pregunta solo por conocimiento, ¿es una buena idea o no?
#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
truncate -s 0 $logfile
done
command-line
scripts
files
log
pylover
fuente
fuente
/var/log
es donde el sistema coloca los mensajes que pueda necesitar más adelante. Ubuntu ha encontrado el problema antes. Leerman 8 logrotate;man logrotate.conf
.Respuestas:
prueba esto:
truncate -s 0 /var/log/*log
EDITAR:
si desea hacer esto más de una vez, debe usarlo
logrotate
para manejar sus registros. Por lo general, se instala en ubuntu. Echa un vistazoman logrotate
(o si no lo tienes instalado, mira la página de manual en línea o instálalo consudo apt-get install logrotate
)desde la página de manual:
fuente
Si desea borrar todos sus archivos de registro, no solo los de la carpeta de registro de primer nivel, puede usar:
Teniendo en cuenta que si ya ha
logrotate
corrido, también deberá borrar los.gz
registros rotados :Un uso válido para esto podría ser construir un contenedor de dispositivo VM para su distribución, por ejemplo.
Usted debe no necesita hacer esto como parte del mantenimiento rutinario: DEM como sugirió con razón, su uso
logrotate
para eso.fuente
Como seguimiento a @DEN respuesta
Esto encontrará todos los archivos de registro
/var/log
y los truncará a 0 bytes.fuente
*.log*
lugar, pero no estoy seguro de si es 100% seguro, por lo que no lo he incluido en la respuesta. Porque hay archivos comodovecot.log-20180930
ydovecot.log-20180923.gz
.Existen dos métodos para truncar completamente un archivo, generalmente aplicable a la mayoría de los sistemas operativos compatibles con POSIX. Lo más común que verá con las secuencias de comandos de shell es algo como
true > file.txt
o: > file.txt
(y en el caso debash
shell,>
solo la redirección es suficiente). Esto se debe a la forma en que los>
archivos se abren mediante syscallopen()
oopenat()
medianteO_WRONLY|O_CREAT|O_TRUNC
indicadores, que lee solo escritura O crea si el nombre de archivo no existe, O trunca el nombre de archivo existente.Con eso en mente, podemos implementar algo así en C nosotros mismos:
Asigne un nombre al archivo que almacena este código
trunc.c
y compílelogcc trunc.c -o trunc
, y usted tiene una pequeña utilidad que truncará un argumento de nombre de archivo que se proporciona como entrunc ./foobar.txt
. Por supuesto, este código no realiza otras verificaciones, solo trunca el primer parámetro posicional. Dejaré que los lectores descubran cómo lidiar con más de un parámetro posicional. En la nota al margen, haytruncate()
syscall que también podríamos usar, y truncar un archivo a una longitud variable.Ahora, si no eres fanático de C, Python podría ser más fácil para ti.
open()
El comando funciona según el mismo principio en Python: abrir el archivo para escribir y truncar si existe un nombre de archivo. Así podemos hacerEn cuanto a encontrar todos los
.log
archivos, eso ya se ha cubierto en otras respuestas: use*
glob o glob extendidobash
. También hayfind -type f -name "*.log"
, que tiene un-exec
indicador para ejecutar comandos (en este caso particularsh -c ''
para aprovechar>
porque>
es un operador de shell y no un ejecutable externo). Así puedes hacerEs también digno de mención que los archivos de registro en el directorio, como
/var/log
a menudo se hacen girar a través del servicio logrotate, por lo que habrá nombres de archivo tales como/var/log/service.log
,/var/log/service.log.1
, etc., por lo que puede que quiera usar*.log.[1-9]
el patrón vezEntre otras cosas, podemos copiar
/dev/null
en el archivo deseado. Por extraño que parezca, a pesar de que/dev/null
es un tipo de archivo de dispositivo de caracteres especiales, cuando copia eso en otro lugar, el resultado es un archivo normal vacío, al menos con GNUcp
. Así podemos hacero
Otra lectura sugerida:
fuente
Es una buena práctica rotar los registros en / var / logs para rotar con la funcionalidad logrotate, pero no siempre que lo deseemos. Se imprimirán registros del sistema y serán útiles para depurar cualquier falla.
Si es un requisito no utilizar logrotate, se pueden explorar las opciones. Aunque truncar es una opción fácil en algunos sistemas del sistema Unix, este comando no está disponible fácilmente, es necesario instalarlo. Si no se permite instalar el nuevo comando, se puede usar el siguiente bucle.
fuente
for logfile in /path/*.log
lugar.