我的目标是旋转uWSGI生成的日志,但是当原始日志文件被删除(压缩后)时,不会再次重新创建。
所以我认为应用程序需要在删除文件后正常重启主进程。我使用这个RESTART脚本:
/home/tester/uwsgi-18
--reload /var/run/uwsgi/my_app_tester/my_app_tester.pid
应用重启,但日志没有。
为了再次进行日志记录工作,我需要终止-2进程并再次运行START脚本,这样就会生成另一个进程号并再次进行日志记录。
显然,我不希望这种硬停止只是为了旋转日志......
我的应用程序是使用Catalyst构建的,服务器运行Nginx,这里是uWSGI START脚本:
/home/tester/uwsgi-18
--master
--daemonize /var/log/uwsgi/my_app_tester/log
--socket /tmp/uwsgi/my_app_tester/my_app_tester.socket
--processes 1
--psgi /home/tester/my_app/my_app.psgi
--pidfile /var/run/uwsgi/my_app_tester/my_app_tester.pid
--procname-master TESTER
-L
是否有其他方法可以在不丢失连接和记录的情况下重新启动应用程序?
提前谢谢你: Migue
答案 0 :(得分:15)
您有各种方法:
1)logrotate脚本中的copytruncate,这将在没有uWSGI的帮助下可靠地工作
2)uWSGI日志轮换:--log-maxsize <bytes>
会在达到特定大小时自动轮换日志
3)经典logrotation +日志重新加载,只需添加--log-master
并使用http://uwsgi-docs.readthedocs.org/en/latest/MasterFIFO.html触发日志重新加载
还有其他方法(比如在触摸文件时触发日志重新打开),但前一个是最常见的。