Hallo Stefan,
ich starte zwei Perlprogramme gleichzeitig mit einem cronjob!
Möchte aber das, das zweite perlprogramm erst gestartet wird, wenn das erste sich beendet hat.
Wie kann ich abfragen ob sich das erste Perlprogramm schon beendet ist?
Das klingt mir schwer danach, als ob Du in Perl Semaphore einbauen willst. Ich habe zwar selber nichts mit Perl zu tun, mußte sowas aehnliches aber mal in VBA verwirklichen. Vielleicht kannst Du aus meinen VBA-Code-Schnipseln was machen.
<VBA-Code>
Function SetSemaphore(iStatus As Integer) As Integer
'******************************************************************
'Date Version Status Author
'29.07.1999 1.0 develop mnikolai
'******************************************************************
'Version changed because of
'1.0 introduction
'******************************************************************
'used and referenzed functions / sheet / files
'** mistake()
'******************************************************************
'Parameters
'IN
'OUT
' True / False
'******************************************************************
'Short description
' sets and resets the semaphore
On Error GoTo err_SetSemaphore
Const N_Fkt = "Fct. SetSemaphore()"
Dim ierr As Integer
Dim iErrInd As Integer
Dim iErrFlag As Integer
Dim fhandle As Integer
Select Case iStatus
Case i_ON
fhandle = FreeFile()
If (Dir("C:\sema.txt") <> "") Then
SetSemaphore = False
Else
Open "C:\sema.txt" For Output As #fhandle
Print #fhandle, "Used"
Close #fhandle
SetSemaphore = True
End If
Case i_OFF
If (Dir("C:\sema.txt") = "") Then
SetSemaphore = False
Else
Kill "C:\sema.txt"
SetSemaphore = True
End If
Case Else
SetSemaphore = False
End Select
exit_SetSemaphore:
Exit Function
mistake_SetSemaphore:
SetSemaphore = False
GoTo exit_SetSemaphore
err_SetSemaphore:
If (iErrInd = i_OFF) Then
iErrFlag = True
Resume Next
End If
ierr = Err
ierr = mistake(ierr, N_Fkt)
SetSemaphore = False
Resume exit_SetSemaphore
End Function
Function CheckSemaphore() As Integer
'******************************************************************
'Date Version Status Author
'29.07.1999 1.0 develop mnikolai
'******************************************************************
'Version changed because of
'1.0 introduction
'******************************************************************
'used and referenzed functions / sheet / files
'** mistake()
'******************************************************************
'Parameters
'IN
'OUT
' True / False
' in errorcase -2
'******************************************************************
'Short description
' Checks whether a semaphore is on
On Error GoTo err_CheckSemaphore
Const N_Fkt = "Fct. CheckSemaphore()"
Dim ierr As Integer
If (Dir("C:\sema.txt") <> "") Then
CheckSemaphore = True
Else
CheckSemaphore = False
End If
exit_CheckSemaphore:
Exit Function
mistake_CheckSemaphore:
CheckSemaphore = -2
GoTo exit_CheckSemaphore
err_CheckSemaphore:
ierr = Err
ierr = mistake(ierr, N_Fkt)
CheckSemaphore = -2
Resume exit_CheckSemaphore
End Function
</VBA-Code>
Beide Programme enthalten dann in dem kritischen gemeinsamen Bereich vorher eine Schleife, die solange läuft, bis die Semaphore offen ist. Danach wird die Semaphore geschlossen und beim Verlassen des kritischen Bereiches wieder geöffnet, damit der wartende Prozess weiterarbeiten kann.
Wenn Du das ganze jetzt nach Perl transferierst, kannst Du ja evtl. zwei oder drei kleine Shell-Batch-Programme draus machen, die das Semaphoren Schließen, -Öffnen und -Prüfen übernehmen und die Du aus den Scripts heraus aufrufst.
Danke fuer eure Hilfe!
Gern geschehen.
Gruss,
Michael N.
PS.: Ich habe den Hinweis von Martin Speiser und Stefan Einspender gelesen, denke mir aber, daß Stefan durchaus mehrer Adressen haben könnte und uns hier nur verwirren will.