← Back to team overview

sslug-teknik team mailing list archive

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 ?


Follow ups