sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #90067
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