Los registros de uwsgi se dividen y guardan por día.

Recientemente, el sitio web ha sido atacado con frecuencia. Es necesario verificar el registro de uwsgi con frecuencia, analizarlo, encontrar una ip sospechosa y configurar la lista negra; al verificar el registro de uwsgi, se encuentra que el registro de uwsgi es muy grande, con cientos de MB, y la descarga es muy inconveniente, y el registro se abre. No es muy conveniente ver los registros;

  最理想的就是每天一个日志文件,方面管理和查看。

  uwsgi没有提供按天切割日志的配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便,我们一般是按照时间查询。

  我是小白,根据网上的资料,归纳总结,并加以菜鸟备注呈现给大家;

El principio es: cooperar con la tecnología de script sh+crontab, usar el parámetro mv+touch-logreopen, después de mover el archivo de registro, dejar que uwsgi vuelva a abrir el registro y grabarlo.

Sistema: centos 7 (otros sistemas son iguales)

Aplicación: aplicación web django + uwsgi + nginx (siempre que haya uwsgi, la configuración es la misma)

1. En el archivo de configuración de uwsgi uwsgi.xml, agregue la configuración touch-logreopen
(en mi caso, el archivo de configuración de uwsgi está en el directorio raíz del proyecto django, y el principio es el mismo en otros casos):

./logs/uwsgi.log

./logs/.touchforlogrotat

Si su archivo de configuración de uwsgi está en formato ini, puede agregar el siguiente contenido

#El proceso se ejecuta en segundo plano e imprime el registro en el archivo
especificado . su propia situación. Debido a que el archivo de configuración de uwsgi está en el directorio raíz del proyecto, la ruta anterior ./logs/uwsgi.log significa que una carpeta inicia sesión en el directorio donde se encuentra el archivo de configuración de uwsi, y uwsgi.log está en el carpeta de registros.


El principio de la configuración anterior combinada con el siguiente archivo de script es: cuando se toca el archivo al que apunta el objeto de monitoreo touch-logreopen y cambia la marca de tiempo, el archivo uwsgi.log actual se renombrará de acuerdo con la fecha y se guardará en el carpeta correspondiente Al mismo tiempo, uwsgi recreará el archivo uwsgi.log para escribir nuevos registros sin interrumpir la ejecución del programa actual. Si no hay un objeto de escucha touch-logreopen, no se puede volcar uwsgi.log.

2. Cree un archivo de secuencia de comandos
En el directorio de shell del directorio raíz del sistema, cree un nuevo archivo de secuencia de comandos .sh uwsgi_log_cut.sh, el contenido es el siguiente:

#!/bin/bash
LOGDIR="/www/logs/" #Directorio de registro actual
DATE= date -d "yesterday" +"%Y-%m-%d"
NEWDIR="/www/logs/history" #El historial de la nueva carpeta se usa para colocar registros antiguos
mkdir -p ${NEWDIR}
mv $ {LOGDIR}/uwsgi.log NUEVODIR/uwsgi − {NUEVODIR}/uwsgi-N E W D I R / u w s g i {FECHA}.log #Cambie el nombre del registro anterior a la fecha
toque /www/logs/.touchforlogrota
La ruta del archivo www en él está en el directorio raíz del sistema, y mi proyecto django está en la carpeta www.

3. La configuración de ejecución del script
Para configurar la tarea programada a través de crontab, ingrese en la línea de comando:

crontab -e
ingresará un archivo de usuario actual, agregue la siguiente línea a este archivo:

'''

          • Ejecutar la tarea
            primero * los primeros minutos de la hora: 0-59
            el segundo * las primeras horas del día: 0-23
            el tercero * los primeros días del mes: 1-31
            el cuarto * Mes del año: 1-12
            quinto * Semana de la semana: 0-7 0, 7 todos representan el domingo
            '''
            0 0 * * * sh /shell/uwsgi_log_cut.sh #Representa la ejecución del script uwsgi_log_cut.sh a las 0:00 todos los días El
            principio aquí es ejecutar el archivo uwsgi_log_cut.sh en la carpeta shell en el directorio raíz del sistema a las 0:00 todos los días.

Finalmente, reinicie uwsgi, la carpeta de historial en el archivo de registros tendrá registros diarios

#!/bin/bash
#0 0 * * * sh /home/lizhihua/ranger2020/restart.sh
echo "********************重启开始********************"
# 切换目标文件夹
cd /home/lizhihua/ranger2020/
# 拉到当前目录
#https://gitee.com/gistide_1/ranger2020.git

# 激活环境
source /home/lizhihua/ranger2020/venv/bin/activate
# 更新或者下载依赖包

# 查看进程
ps -ef|grep python3.7

#这里的-d 参数判断$myPath是否存在 ,! -d 表示不存在
if [ ! -d "/var/log/uwsgi" ]; then
  mkdir -p /var/log/uwsgi
fi

NEWDIR="/var/log/uwsgi/history"   #新建文件夹history用来放旧日志
if [ ! -d "$NEWDIR" ]; then
  mkdir -p ${
    
    NEWDIR}
fi

myPath="/var/log/uwsgi/ranger2020.log"
if [ ! -f "$myPath" ]; then
  touch "$myPath"
fi

dd=`date +%Y%m%d%H%M%S`

mv -f /var/log/uwsgi/ranger2020.log  ${
    
    NEWDIR}/ranger2020-${
    
    dd}.log   #将旧日志重新以日期命名

mystart="/home/lizhihua/ranger2020/restart.sh"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$mystart" ]; then
  chmod -R 777 "$mystart"
fi

sleep 3s
echo "正在关闭Python服务"
mypid="/var/run/ranger2020.pid"
if [ ! -f "$mypid" ]; then
  PID=-1
else
  PID=$(cat "$mypid")
fi
PID_EXIST=$(ps aux | awk '{print $2}'| grep -w $PID)

if [ ! $PID_EXIST ];then
  echo the process $PID is not exist
  pkill -9 -f uwsgi
  echo "启动Python服务"
  #启动:
  uwsgi --ini run.ini
else
  echo the process $PID exist
  echo "重启Python服务"
  #重启:
  uwsgi --reload "$mypid"
fi

#保存备份个数
number=30
#找出需要删除的日志
delfile=`ls -l -crt  $NEWDIR/*.log | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt  $NEWDIR/*.log | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  #echo "delete $delfile" >> $backup_dir/*.log
fi

echo "********************重启结束********************"

Supongo que te gusta

Origin blog.csdn.net/lizhihua0625/article/details/122622416
Recomendado
Clasificación