Schrift
[thread]5180[/thread]

Mehrere Instanzen verhindern? (Seite 2)

Leser: 1


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Matze
 2006-05-10 17:51
#45393 #45393
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
@brathering: Es gibt ja nicht nur den Namen des Programms ;)
Du kannst ja mal Data::Dumper benutzen um dir die Process::Info
anzusehen.
Da findest du bestimmt noch ein paar mehr Kriterien...

Im Logfile könnte man z.B. immer jede Minute die aktuelle Zeit eintragen
mit einem "ich lebe!", oder so ähnlich, und wenn man den Logfile
liest, dann muss man nur noch nachsehen, ob die Zeit angemessen
ist, dass heißt, mindestens 2 Minuten nachsteht, oder ähnliches.

MfG. Matze
Mit freundlichen Grüßen: Matze
BratHering
 2006-05-12 21:16
#45394 #45394
User since
2005-04-28
155 Artikel
BenutzerIn
[default_avatar]
[quote=Matze,10.05.2006, 15:51]@brathering: Es gibt ja nicht nur den Namen des Programms ;)
Du kannst ja mal Data::Dumper benutzen um dir die Process::Info
anzusehen.
Da findest du bestimmt noch ein paar mehr Kriterien...[/quote]
Danke für den Tipp, da in PerlDoc nur Name und ProcessID genannt wurden habe ich nicht weiter nachgeschaut, dumm von mir.
Tatsächlich sind da ne Menge von Eigenschaften mehr zu finden...

Nunja, ich habe mehrere identische Perl-Skripte laufen lassen, um zu schauen ob ich diese eindeutig unterscheiden kann und sagen kann welcher Process welches Script ist (wobei alle perl.exe heissen).
Leider ist das doch etwas mühsam, weil eben so viele Eigenschaften vorhanden sind.
Könnte vielleicht mir jemand sagen welches dieser vielen Eigenschaften in der Praxis am besten zu verwenden wäre? - Hat jemand Erfahrung damit?


Und noch eine Frage habe ich:
Win32::Process::Info ist ja eine Win32-Lösung.
Wie kann man sich unter Linux in Perl anschauen welche Processe mit deren Eigenschaften gerade laufen?
Gibt es da ein extra Modul für Linux/Unix? - Bis jetzt weiß ich nur, dass $$ der Process ID des atm perl.exe + Skript ist und, dass es diverse *pid() functionen gibt.
Aber gibt es so eine schöne Auflistung wie es mit Win32::Process::Info möglich ist?


MfG
Brathering
Matze
 2006-05-12 23:26
#45395 #45395
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich kenne keine Lösung für Linux mit einer Prozess-Liste.
Aber das bringt dich sowieso nicht weiter, wenn du nicht alle Perl-
Programme die während deines Programmes auch noch laufen mit
beenden möchtest.

Mit Logfile:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl -w
#
use strict;

my $logfile = "log.file";
my @time = localtime();
my $time = $time[2] . ":" . $time[1];

{
  open IN, "<", "$logfile";
    chomp(my@logfile = <IN>);
  close IN;

  if ($logfile[-1] =~ /$time/) {
    exit 1
  }
}

use Tk;

my $mw = tkinit();
$mw->after(300,\&timestamp);

MainLoop;

sub timestamp {
  open OUT, ">>", "$logfile";
    print OUT "$time\n";
  close OUT;

  $mw->after(300,\&timestamp);
}

Ok, es ist nicht auf die Sekunde genau, dein Programm kann nicht
kurz beendet und erneut gestartet werden, ohne den Logfile
zwischenher schnell zu ändern, aber das kannste ja, wenn nötig,
auch noch mit rein bringen.
(Einfach den timestamp öfter aufrufen.)

Ich hoffe es hilft dir.

MfG. Matze
Mit freundlichen Grüßen: Matze
betterworld
 2006-05-13 02:42
#45396 #45396
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Matze: Ich sprach von einem Lockfile, nicht von einem Logfile. Andere Instanzen ueber einen Log zu finden halte ich fuer ziemlich umständlich und ungenau.
murphy
 2006-05-13 02:47
#45397 #45397
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Warum sollte man das Problem eigentlich nicht mit Dateisperren lösen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl
use strict;
use warnings;

use Fcntl qw/:flock/;
use File::HomeDir qw//;

BEGIN {
my $lockfile_path = File::HomeDir->my_data . '/my_lockfile';
open LOCKFILE, '>', $lockfile_path;
flock LOCKFILE, LOCK_EX | LOCK_NB
or die "cannot acquire exclusive lock: $!\n";
}

# do something sensible here
print "Here I am\n";
sleep 10;
print "And there I go\n";

END {
flock LOCKFILE, LOCK_UN;
close LOCKFILE;
}


Ok, laut perlport funktioniert das nicht auf Mac OS 9 oder älter, VMS, RISC OS, VOS und Windows 95 oder älter -- aber es ist allemal portabler und einfacher als eine zusammengehackte Lösung über Prozesstabellen, finde ich.
When C++ is your hammer, every problem looks like your thumb.
Matze
 2006-05-13 11:58
#45398 #45398
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=betterworld,13.05.2006, 00:42]Matze: Ich sprach von einem Lockfile, nicht von einem Logfile.  Andere Instanzen ueber einen Log zu finden halte ich fuer ziemlich umständlich und ungenau.[/quote]
Was ist den ein Lockfile ?

Eigentlich finde ich meine Methode aber nicht sehr umständlich,
und ungenau auch nicht, wenn man die Sekunden mit rein nimmt
und den timestamp öfter aufruft:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl -w
#
use strict;

my $logfile = "log.file";
my @time = localtime();
my $time = $time[2] . ":" . $time[1] . ":" . $time[0];

{
 open IN, "<", "$logfile";
   chomp(my@logfile = <IN>);
 close IN;

 if ($logfile[-1] =~ /$time/) {
   exit 1
 }
}

use Tk;

my $mw = tkinit();
$mw->after(100,\&timestamp);

MainLoop;

sub timestamp {
 open OUT, ">>", "$logfile";
   print OUT "$time\n";
 close OUT;

 $mw->after(100,\&timestamp);
}


MfG. Matze\n\n

<!--EDIT|Matze|1147507107-->
Mit freundlichen Grüßen: Matze
renee
 2006-05-13 12:26
#45399 #45399
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Lies mal: http://www.gsp.com/cgi-bin/man.cgi?section=1&topic=lockfile

Es gibt sogar entsprechende Module auf CPAN: CPAN:LockFile::Simple
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Matze
 2006-05-13 16:00
#45400 #45400
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke renne!
Gebe mich geschlagen, mit Lockfile gehts wirklich einfacher/besser.

MfG. Matze
Mit freundlichen Grüßen: Matze
betterworld
 2006-05-13 16:01
#45401 #45401
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=Matze,13.05.2006, 09:58][quote=betterworld,13.05.2006, 00:42]Matze: Ich sprach von einem Lockfile, nicht von einem Logfile. Andere Instanzen ueber einen Log zu finden halte ich fuer ziemlich umständlich und ungenau.[/quote]
Was ist den ein Lockfile ?[/quote]
So etwas, was murphy in seinem Code macht.

Lockfile::Simple hat eine etwas andere Vorgehensweise, aber im Großen und Ganzen ist es dieselbe Idee. Wobei der Algorithmus von Lockfile::Simple nach eigenenen Angaben nicht 100% sicher ist.\n\n

<!--EDIT|betterworld|1147521806-->
pq
 2006-06-16 12:16
#45402 #45402
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=Matze,13.05.2006, 09:58]Was ist den ein Lockfile ?[/quote]
lock heißt schloss, sperre, schleuse etc.
ein logfile dagegen ist so etwas wie ein logbuch, falls du das schonmal
gehört hast.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2006-05-09 19:05.