[linux] Re: voorkomen dat een proces twee keer start.

Kees Theunissen theuniss op rijnh.nl
Ma Jun 19 18:39:10 CEST 2006


On Mon, 19 Jun 2006, Ronald Nooij wrote:

>Allen....
>
>Ik heb perl script gemaakt dat maar één keer mag draaien. Het is dus niet
>toegestaan om een twee instaties op te starten.
>
>Nu wilde ik even kijken of jullie het eens zijn met mijn oplossing, of dat ik
>het beter anders aan kan pakken.
>
>
>####code van het GRIDrun perl script####
>
>
>#!/usr/bin/perl
>$processList = `ps -ef | awk '/GRIDrun/ && !/awk/ && !/$$/'`;
>$processList =~ s/  / /;
>@procs = split(/ /, $processList);
>$prevGridPID = $procs[2];
>
>if ($prevGridPID > 0)

Je doet hier een 'ps'.
De output daarvan stuur je door 'awk' heen.
Uit de output die je dan over houdt moet perl nog wat spaties filteren.
Daarna wordt de string in stukken gehakt.
Een van de brokjes  wordt aan $prevGridPID toegewezen.
Tenslotte test je de waarde van $prevGridPID.
En dat alles op een multi-tasking multi-user systeem.

Er is dus een zee van tijd verstreken tussen je aanvankelijke 'ps' en
het moment waarop je concludeert dat het script niet draait.
Dat script kan intussen best nog een keer (of zelfs vaker) gestart
zijn.

Zoek eens naar de term 'lock file'.
In perl bestaat de functie 'flock'.

[ ... ]

>Na wat testen werkt het prima.

Heb je het ook als eens zo getest:
  GRIDrun &; GRIDrun &; GRIDrun &; GRIDrun &
Dus echt proberen om het script nagenoeg gelijktijdig meerdere keren
op te starten?
Ik vrees dat er een dikke kans is dat jouw test dit niet onderschept.
En als er een kans is op data corruptie dan kan je dit op beter niet
zo uitproberen.


Groeten,

Kees.

-- 
Kees Theunissen
F.O.M.-Instituut voor Plasmafysica "Rijnhuizen", Nieuwegein
E-mail: theuniss op rijnh.nl,     Tel: 030-6096724,     Fax: 030-6031204




More information about the Linux mailing list