Schrift
[thread]258[/thread]

Daemon übers Web starten



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
FReAK La Marsch
 2004-05-14 14:04
#2462 #2462
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,
ich habe einen Daemon in Perl geschrieben und der läuft auch.
Nun würde ich den Daemon gerne übers Web starten und stoppen, damit er nur läuft wenn ich ihn brauche.

Ich habe es so versucht:

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
      1 #!/usr/bin/perl
2
3 my $program = "/meinskript.pl";
4 my $foundit = 0;
5
6 open (IN, "ps axw |");
7 while (<IN>) {
8 if (/$program/) {
9 $foundit = 1;
10 last;
11 }
12 }
13 close IN;
14
15 print "Content-Type: text/html\n\n";
16 if (!$foundit)
17 {
18 print "starte $program<br>";
19 system("deamon.pl") or print "problem! $!";
20 }
21 else
22 {
23 print "$program l&auml;uft bereits<br>";
24 }
25 print "Fertig";
26 exit;


Da habe ich nun das Problem, daß der system Aufruf zwar lokal auf dem Server funktioniert und der Daemon startet, doch beim Aufruf übers Web passiert nichts. In $! steht dann Illegal Seek oder so.
Bei unseren Admins vermute ich fast, daß der Webuser kein Recht hat den Daemon auszuführen.
Kennt jemand eine andere Methode einen Daemon zu starten? Bzw. wie stopp ich das Ding eigentlich aus Perl heraus wieder?

Falls jemand meint die Admins werden schon ihre Gründe haben ...
Da ich den Daemon direkt durch einen Webaufruf starten kann finde ich es recht albern wenn ich da jetzt ein Skript habe zum testen ob der Daemon läuft und dann eins um ihn direkt zu starten.

Viele Grüße und viel Spaß,
FReAK
format_c
 2004-05-14 14:58
#2463 #2463
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wenn du schon einen Deamon schreibst solltest du dir beim Start des jenigen auch die PID merken und eine Funktion wie status oder ähnliches implementieren und diese kannst du ja dann von einem CGI-script abfragen.

Gruß Alex
format_c
 2004-05-14 15:00
#2464 #2464
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
außerdem musst du prüfen mit welchen user das CGI ausgeführt wird. Defaultmäßig nämlich mit dem Webserveruser.

Wenn du kein Risiko eingehen willst (ich würde z.B. eine cgi nie als root ausführen oder ähnliches) gibts noch sudo

Gruß Alex
FReAK La Marsch
 2004-05-14 16:44
#2465 #2465
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke für die Infos.
Wie genau die cgis ausgeführt werden weiß ich nicht und kann ich auch nicht verändern, da ich keinen zugriff auf die Konfiguration habe und die Admins bei mir nicht sonderlich kommunikativ sind.
Deshalb muss ich ja auch hier fragen obs da nen anderen Weg gibt um externe Skripte aus cgi zu starten (darum gehts mir eigentlich) als den von mir versuchten.

Aber so wichtig ist es auch nicht mehr, da ich ja zur not noch den manuellen Start habe.
betterworld
 2004-05-14 17:51
#2466 #2466
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=FReAK La Marsch,14.05.2004, 12:04][/quote]
Versuch es mal so:
Code: (dl )
open (IN, "ps axw |") or die "open: $!";

Ich denke naemlich, dass das Illegal Seek waehrend dem <IN> entsteht und damit das vorherige $! ueberschreibt.
FReAK La Marsch
 2004-05-14 18:27
#2467 #2467
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
Oh Mann ich Depp, ich hätte vielleicht sagen sollen wo die Meldung kommt. natürlich beim starten des anderen Skripts
Code: (dl )
system("deamon.pl") or print "problem! $!";


Dann frag ich auch gleich noch genauer. Gibt es einen anderen Weg unter Perl ein Skript zu starten außer mittels system() oder ``?
ptk
 2004-05-14 18:32
#2468 #2468
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=FReAK La Marsch,14.May.2004, 16:27]
Code: (dl )
system("deamon.pl") or print "problem! $!";
[/quote]
Falle! Denn system() gibt 0 bei Erfolg zurueck. Du muesstest also "and" statt "or" verwenden. Da das haesslich ist, macht man es lieber ganz ausfuehrlich:
Code: (dl )
1
2
3
if (system(...) != 0) {
warn $!;
}
betterworld
 2004-05-14 19:22
#2469 #2469
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Wird in Perl 6 wohl andersrum sein. Ich frag mich, wo dann der Exit-Status steht ???
FReAK La Marsch
 2004-05-17 02:52
#2470 #2470
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hmmm, interessant, wegen solcher Sachen liebe ich Perl :-)
Man lernt einfach nie aus.

Und vielen Dank an alle Leser und Antworter!

Ich hab mein Skript jetzt einfach das ganze Wochenende durchlaufen lassen und es hat wunderbar geklappt. (Nichtmal die Admins haben sich beschwert)

Noch viel Spaß,
FReAK
Gast Gast
 2004-05-17 19:02
#2471 #2471
Ich würde das Teil einfach nach jedem Durchlauf forken und den Parent killen.
Dann hast Du stets eine 'frische' Prozessnummer und der Admin sieht keinen Grund das Programm wegen zu langer Verweildauer abzuschießen :)
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2004-05-14 14:04.