← Back to team overview

sslug-teknik team mailing list archive

RE: Tjek om en fil er åben

 

> Hey
> 
> Jeg har en server process, som skriver en masse log filer. Når log 
> filerne når op på 10MB bliver de lukket og en ny påbegyndt.
> Det kører fint.
> Jeg har så et cron job, som en gang i timen komprimerer alle 
> XML filer, 
> bortset fra den, som serveren skriver til.
> 
> cron scriptet ser således ud:
> 
> #!/bin/bash
> LOG_PATH=/data/ChatServer/XML_logs
> for file in $LOG_PATH/*.xml; do
>     lsof $file > /dev/null
>     code=$?
>     if [ "$code" == "1" ]; then
>         gzip $file
>     fi
> done
> 
> Det fungerer sådan set godt nok. lsof indikerer, at ingen har en fil 
> åben, ved at returnere med '1' som exit code.
> Men lsof er meget er meget lang tid om at gøre sig færdig:
> [root@xbox scripts]# time lsof 
> /data/ChatServer/XML_logs/Chat_DK_1_ChatLog_2006-11-28_23\:05\:55.xml
> 
> real    0m16.482s
> user    0m0.388s
> sys     0m16.533s
> [root@xbox scripts]#
> 
> Findes der en smartere måde ?
> 
> 

Der må være nogle processer der belaster maskine når lsof tager så lang tid.


Du kan forresten optimere dit script en smule, hvilket gør at det er mere læsevenligt.

#!/bin/bash
LOG_PATH=/data/ChatServer/XML_logs
for file in $LOG_PATH/*.xml; do
    if test `lsof $file | wc -l` = 0 ; then
         gzip -f $file
    fi
done

 
Med venlig hilsen / Regards
 
Frank Larsen
Kimik IT A/S
PO Box 740
3900 Nuuk
Greenland
Mail : support@xxxxxxxxxxx
Phone: +299 34 20 00
Fax  : +299 34 20 01
Skype: larsen_frank
Gmail: franklarsen19xx


Follow ups

References