Package: postgresql-common
Version: 199

When I execute
service postgresql start
I observe that logfile descriptor will leak into postmaster and every backend. 
This is not fd opened by PG's syslogger.

root@rc1b-tl7je3ulcm4z9v3c ~ # lsof | grep 'postgresql-10-data.log' | grep 
postgres | grep '/var/log'
postgres  289999          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290011          postgres    1w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290011          postgres    2w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290011          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290011          postgres   13w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290013          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290014          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290015          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290016          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290017          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290018          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290019          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290020          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290036          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290211          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290256          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290257          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log
postgres  290258          postgres    4w      REG              253,1 103172283  
   131900 /var/log/postgresql/postgresql-10-data.log

When logfile is rotated, descriptor remain to be open, but occupied space is 
not accounted by df. This leads to incorrect free space estimation on cluster.
When logfile is big enough during cluster start this can result in sudden 
cluster stop, which could be prevented by monitoring.

If I apply following patch descriptor stops leaking.

I use Ubuntu.
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic

Best regards, Andrey Borodin.

diff --git a/pg_ctlcluster b/pg_ctlcluster
index 1690d3d..6039659 100755
--- a/pg_ctlcluster
+++ b/pg_ctlcluster
@@ -207,9 +207,8 @@ sub start {
     } else {
         setsid or error "could not start session: $!";
         if ($info{'logfile'}) {
-            my $fd = POSIX::open($info{'logfile'}, 
POSIX::O_WRONLY|POSIX::O_APPEND|POSIX::O_CREAT) or error "Could not open 
logfile $info{'logfile'}";
-            dup2($fd, 1);
-            dup2($fd, 2);
+            open(STDOUT, ">>$info{logfile}") or die $!;
+            open(STDERR,  '>&STDOUT')  or die $!;
         }
         exec $pg_ctl @options or error "could not exec $pg_ctl @options: $!";
     }

Reply via email to