On Sat, 2017-12-02 at 11:58 +0530, Anantha Raghava wrote:> Hello Andrew, > > Thanks for proper explanation. > > To overcome this, also as we need to store logs for long, now we > have written a shell script, executed as a crop every three minutes > that checks the file size. If the file size is 1 GB or above, it > moves the log file to <logfile>.timestamp.log.old and clears the main > log file. > > We have commented out the max log size in sub.conf. > > If need be I can share the script hereI'm not sure that will help, that is pretty much what was happening before. The key is to send a -HUP to the whole process tree to make them re-open the logs, otherwise the other child samba processes will still just write to the .old I know this sucks. I think the solution is to have a new reopen-logs message created so this can be used in logroate, and to have it used internally as I mentioned. Andrew Bartlett -- Andrew Bartlett http://samba.org/~abartlet/ Authentication Developer, Samba Team http://samba.org Samba Developer, Catalyst IT http://catalyst.net.nz/services/samba
Hello Andrew, I am now experimenting with my test setup on the log rotation part. While testing different scripts, I observed a very peculiar behavior with log writing process. If the log file name has a variable to be substituted, say %T, it continues to write into it without creating .old file. If it is a simple name like samba.log or dc1.current.log etc., after about 10 MB, the log rotates,with or without my script and appends .old to actual log file and continues to write into .old file. Could you please provide pointers where to look for this log writing routine and why this peculiar behavior? My smb.conf and the script I am using is shown below. Samba version is 4.7.1 /*smb.conf*/ # Global parameters [global] netbios name = DC1 realm = EXZA.COM server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate workgroup = EXZA server role = active directory domain controller ldap server require strong auth = No log level = 10 log file = /var/log/samba/dc1.current.log #"With this file name, the log gets rotated when it reaches 10 MB or above in size, One cannot exactly say at what size it rotates. The process appends .old to the file name and continues to write into .old file." [netlogon] path = /usr/local/samba/var/locks/sysvol/exza.com/scripts read only = No [sysvol] path = /usr/local/samba/var/locks/sysvol read only = No/* */ /*Script used to rotate log*/ File size is set to 10 MB in this script. This script runs in background (not as a cron). **/**/ #!/bin/bash MaxFileSize=10000000 while true do file_size=`du -b /var/log/samba/dc1.current.log | tr -s '\t' ' ' | cut -d' ' -f1` if [ $file_size -gt $MaxFileSize ];then timestamp=`date +%Y%m%d%H%M%S` cp -pr "/var/log/samba/dc1.current.log" "/var/log/samba/dc1.$timestamp.log.old" echo > /var/log/samba/dc1.current.log fi done/* */ -- Thanks & Regards, Anantha Raghava Do not print this e-mail unless required. Save Paper & trees. On 02/12/17 12:07 PM, Andrew Bartlett wrote:> On Sat, 2017-12-02 at 11:58 +0530, Anantha Raghava wrote: >> Hello Andrew, >> >> Thanks for proper explanation. >> >> To overcome this, also as we need to store logs for long, now we >> have written a shell script, executed as a crop every three minutes >> that checks the file size. If the file size is 1 GB or above, it >> moves the log file to <logfile>.timestamp.log.old and clears the main >> log file. >> >> We have commented out the max log size in sub.conf. >> >> If need be I can share the script here > I'm not sure that will help, that is pretty much what was happening > before. The key is to send a -HUP to the whole process tree to make > them re-open the logs, otherwise the other child samba processes will > still just write to the .old > > I know this sucks. I think the solution is to have a new reopen-logs > message created so this can be used in logroate, and to have it used > internally as I mentioned. > > Andrew Bartlett
Hi, Samba is replacing the %T variable with actual timestamp. But timestamp format is different as shown in this log entry. Unable to open new log file '/var/log/samba/dc1.2017/12/04 00:05:54.log': No such file or directory "Unable to open new log file '/var/log/samba/dc1.2017*/12/04 00:05:54*.log': No such file or directory" 2017/12/04 00:05:54 part of the file name is the actual culprit. Because of the format, file name is getting interpreted as folder ".../dc.2017/12/" and file as "04 00:05:54.log". This file will never get created. Because of this probably we see that a log file as "dc1.%T.log" created instead. If the timestamp format is corrected, %T variable can be handled. -- Thanks & Regards, Anantha Raghava Do not print this e-mail unless required. Save Paper & trees. On 03/12/17 8:48 PM, Anantha Raghava wrote:> > Hello Andrew, > > I am now experimenting with my test setup on the log rotation part. > > While testing different scripts, I observed a very peculiar behavior > with log writing process. > > If the log file name has a variable to be substituted, say %T, it > continues to write into it without creating .old file. If it is a > simple name like samba.log or dc1.current.log etc., after about 10 MB, > the log rotates,with or without my script and appends .old to actual > log file and continues to write into .old file. Could you please > provide pointers where to look for this log writing routine and why > this peculiar behavior? My smb.conf and the script I am using is shown > below. > > Samba version is 4.7.1 > > /*smb.conf*/ > > # Global parameters > [global] > netbios name = DC1 > realm = EXZA.COM > server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, > drepl, winbindd, ntp_signd, kcc, dnsupdate > workgroup = EXZA > server role = active directory domain controller > ldap server require strong auth = No > log level = 10 > log file = /var/log/samba/dc1.current.log > #"With this file name, the log gets rotated when it reaches 10 > MB or above in size, One cannot exactly say at what size it rotates. > The process appends .old to the file name and > continues to write into .old file." > > [netlogon] > path = /usr/local/samba/var/locks/sysvol/exza.com/scripts > read only = No > > [sysvol] > path = /usr/local/samba/var/locks/sysvol > read only = No/* > */ > > /*Script used to rotate log*/ > > File size is set to 10 MB in this script. This script runs in > background (not as a cron). > > #!/bin/bash > MaxFileSize=10000000 > while true > do > file_size=`du -b /var/log/samba/dc1.current.log | tr -s '\t' ' ' | > cut -d' ' -f1` > if [ $file_size -gt $MaxFileSize ];then > timestamp=`date +%Y%m%d%H%M%S` > cp -pr "/var/log/samba/dc1.current.log" > "/var/log/samba/dc1.$timestamp.log.old" > echo > /var/log/samba/dc1.current.log > fi > > done/* > */ > > -- > > Thanks & Regards, > > > Anantha Raghava > > > Do not print this e-mail unless required. Save Paper & trees. > > On 02/12/17 12:07 PM, Andrew Bartlett wrote: >> On Sat, 2017-12-02 at 11:58 +0530, Anantha Raghava wrote: >>> Hello Andrew, >>> >>> Thanks for proper explanation. >>> >>> To overcome this, also as we need to store logs for long, now we >>> have written a shell script, executed as a crop every three minutes >>> that checks the file size. If the file size is 1 GB or above, it >>> moves the log file to <logfile>.timestamp.log.old and clears the main >>> log file. >>> >>> We have commented out the max log size in sub.conf. >>> >>> If need be I can share the script here >> I'm not sure that will help, that is pretty much what was happening >> before. The key is to send a -HUP to the whole process tree to make >> them re-open the logs, otherwise the other child samba processes will >> still just write to the .old >> >> I know this sucks. I think the solution is to have a new reopen-logs >> message created so this can be used in logroate, and to have it used >> internally as I mentioned. >> >> Andrew Bartlett >