← Back to team overview

sslug-teknik team mailing list archive

Re: samme script bliver kaldt 2 gange

 

On 15/02/2011, at 11.08, Kenni Lund wrote:

> 15. feb. 2011 10.55 skrev Martin Kryger Ahrentsen <martin@xxxxxxxxxxxx>:
>> 
>> On 14-02-2011 23:51, Kenni Lund wrote:
>>> 
>>> 14. feb. 2011 19.55 skrev Henrik Jess Nielsen<henrik@xxxxxxxx>:
>>>> 
>>>> On 2011-02-14 16:47, Martin Kryger Ahrentsen wrote:
>>>>> 
>>>>> Hej Sslug,
>>>>> 
>>>>> Jeg sidder og tester et (bash) script jeg har lavet som skal pakke en
>>>>> masse filer sammen til én fil før de bliver overført.
>>>>> Scriptet bliver kaldt af en process som generere filerne og det er så
>>>>> her problemet opstår.
>>>>> 
>>>>> Scriptet bliver i nogle tilfælde kaldt 2 gange med 0,004 sekunders
>>>>> mellemrum og så virker det process check jeg har indbygget ikke.
>>>>> 
>>>> Jeg har brugt den her side til noget der minder lidt om det ..
>>>> 
>>>> http://wiki.bash-hackers.org/howto/mutex
>>> 
>>> ...er problemet ikke, at der ikke er tid til at oprette en fil eller
>>> et bibliotek som en lås? Så vil eksemplerne på den side heller ikke
>>> virke. Men der er dog nogle links til nogen specialdesignede
>>> programmer på den side, det kan godt være at de kan klare det (men jeg
>>> har ikke kigget på dem eller afprøvet dem).
>>> 
>>> Mvh.
>>> Kenni
>>> 
>>> 
>> Jo det er lige præcis problemet.
>> I linket er der beskrevet at mkdir er en atomar process, hvilket ville kunne
>> løse problemstillingen, men vil det også virke hvis kaldet kommer indenfor 4
>> millisekunder?
>> Hvor hurtigt kan filsystemet lave en eksclusiv lås?
> 
> Ingen anelse, jeg ville lave det med ps, da den træder i kraft i det
> øjeblik, at scriptet kører og ikke først når der manuelt sættes en lås
> på et tidspunkt i løbet af scriptet.
> 
> Det kan godt være at løsningen måske ikke er ligeså smuk som en
> låsefil, men det burde løse dit problem.

Jeg synes mkdir virker ganske udemærket, og du kan bare lade det være linie 1 eller 2 alt efter om du starter tælleriet med linie 0 eller 1.

#!/bin/bash
mkdir /var/lock/$(echo $0 | sed -e "s/^.*\///") || (echo "CREATING LOCKING DIRECTORY FAILED, SOMETHING IS HORRIBLY WRONG, ABORTING" ; exit 1)

hvorfor alt det besvær med mkdir frem for bare manuelt at skrive i dit shell script
	mkdir /var/lock/<name> 
Well, fordi hvis du manuelt skriver det skal du også manuelt ændre navnet. Hvis du derimod bruger den lange automatiske linie, så kan du bare kopier den linie uændret fra script til script.



JonB

Follow ups

References