1、背景
守护进程离不开日志,日志多了就有想办法压缩、备份、删除。如果守护进程自带此功能,那么问题就没有了。如果没有此功能,可以使用其它方法:
logrotate+crontab就是很好的方案!!
2、logrotate+crontab处理uWSGI日志
2.1 Uwsgi配置文件
root@debian:~# cat /etc/uwsgi/uwsgi.ini
[uwsgi]
socket = 127.0.0.1:3031
chdir = /var/www/nevpn/service
wsgi-file = service.wsgi
plugins = python
processes = 1
threads = 2
daemonize = /var/log/uwsgi/uwsgi.log
pidfile = /var/run/uwsgi.pid
注意,要先创建/var/log/uwsgi/文件夹!
2.2 新增Logrotate配置文件
root@debian:/etc/logrotate.d# cat uwsgi
"/var/log/uwsgi/*.log" "/var/log/uwsgi/*/*.log" {
copytruncate
size 2K
rotate 3
compress
delaycompress
missingok
notifempty
}
Size 2K 说明日志超过2K就分割,这个用来测试,实际可以使用size 5M。
Rotate 3, 说明一共存3个日志的备份文件,每次日志整理后,超过3个的,最久的被删除,如下:
drwxr-xr-x 2 root root 4.0K Aug 12 18:01 .
drwxr-xr-x 15 root root 4.0K Aug 12 16:31 ..
-rw-r----- 1 root root 0 Aug 12 18:01 uwsgi.log
-rw-r----- 1 root root 1.4K Aug 12 18:01 uwsgi.log.1
-rw-r----- 1 root root 909 Aug 12 18:01 uwsgi.log.2.gz
-rw-r----- 1 root root 106 Aug 12 17:53 uwsgi.log.3.gz
手动执行logrotate测试一下:
手动执行,测试一下。
logrotate -fv /etc/logrotate.d/uwsgi
-f :强制执行logrotate,
-v :显示执行内容
2.3 Crontab每5分钟执行logrotate
root@debian:~# cat /etc/cron.d/uwsgi
PATH=/bin:/usr/bin:/sbin:/usr/sbin
*/5 * * * * root /usr/sbin/logrotate /etc/logrotate.d/uwsgi
3. 演示
root@debian:~# watch -c ls -ahl /var/log/uwsgi/
Every 2.0s: ls -ahl /var/log/uwsgi/ Fri Aug 14 14:59:29 2020
total 16K
drwxr-xr-x 2 root root 4.0K Aug 14 14:59 .
drwxr-xr-x 16 root root 4.0K Aug 14 11:26 ..
-rw-r----- 1 root root 0 Aug 14 14:59 uwsgi.log
-rw-r----- 1 root root 2.4K Aug 14 14:59 uwsgi.log.1
-rw-r----- 1 root root 479 Aug 14 14:58 uwsgi.log.2.gz
Watch命令可以重复执行指令。
4. 相关资料
logrotate:https://blog.csdn.net/u011285208/article/details/108018003
crontab:https://blog.csdn.net/u011285208/article/details/108018210