Socket-Programmierung
Lin Xiang
- perl
0 nurso0 Christian Kruse
Hallo,
ich habe eine Frage bezüglich PERL. Nämlich will ich einen Chat basierend auf Socket in PERL programmieren. Ich logge mich per Telnet (Putty) ein und will das Chatserver-Skript starten. Es funktioniert. Doch sobald ich mich aus Putty ausgeloggt habe, wird das Skript beendet. Wie kann ich so machen, dass der Chat-Server ständig läuft?
Viele Grüße.
Hallo,
ich habe eine Frage bezüglich PERL. Nämlich will ich einen Chat basierend auf Socket in PERL programmieren. Ich logge mich per Telnet (Putty) ein und will das Chatserver-Skript starten. Es funktioniert. Doch sobald ich mich aus Putty ausgeloggt habe, wird das Skript beendet. Wie kann ich so machen, dass der Chat-Server ständig läuft?
Viele Grüße.
wenn dein server ein linux sever ist dann richte dir start stop scripte ein. der programm start ist an deine konsole gebunden. wenn du die schliest beendest du auch das program.
wenn dein server ein linux sever ist dann richte dir start stop >scripte ein. der programm start ist an deine konsole gebunden. wenn >du die schliest beendest du auch das program.
Und wie mache ich das?
Sorry, bin totaler Linux-Newbie
Und wie mache ich das?
Sorry, bin totaler Linux-Newbie
ist nicht so einfach.
habe aber noch eine andere idee.
erstellen dir ein geschützten webbereich(.htaccess).
hier nun cgi oder php scripte zum starten und zum stoppen des scriptes reinlegen.
jetzt brauchst du ja nur noch über den browser die scripte aufrufen fertig.
erstellen dir ein geschützten webbereich(.htaccess).
hier nun cgi oder php scripte zum starten und zum stoppen des >scriptes reinlegen.
jetzt brauchst du ja nur noch über den browser die scripte aufrufen >fertig.
Ja, aber wenn ich Browserfenster schließe, wird doch das Script wieder beendet. Wie mache ich das denn nun mit Start und Stop Script?
Viele Grüße.
Hi,
bei einer SSH-Session kannst Du ein beliebiges Programm einfach mittels & im Hintergrund laufen lassen, so das es nach Beendigung Deiner Session noch weiterläuft. Um unnötige Ausgabe auf Konsolenebene zu vermeiden hilft auch noch ein > /dev/null
Das ganze könnte so aussehen
perl meinscript.pl > /dev/null &
Ciao, Stephan
http://www.w3solutions.de
bei einer SSH-Session kannst Du ein beliebiges Programm einfach mittels & im Hintergrund laufen lassen, so das es nach Beendigung Deiner Session noch weiterläuft. Um unnötige Ausgabe auf Konsolenebene zu vermeiden hilft auch noch ein > /dev/null
Das ganze könnte so aussehen
Danke erstmal, aber leider funktioniert es nicht. Sobald ich Putty beendet, wird auch das Script beendet.
Hi Christian, danke für den Ratschlag (habe den erst jetzt gelesen), nun ich wollte mal fragen, ob es nun geht oder nicht. Und wenn nicht, wie ich das sonst machen kann!
Viele Grüße.
Hallo Lin Xiang,
Hi Christian, danke für den Ratschlag (habe den erst jetzt
gelesen), nun ich wollte mal fragen, ob es nun geht oder
nicht. Und wenn nicht, wie ich das sonst machen kann!
Natuerlich geht das. Die Loesung habe ich dir doch als direkte
Antwort zu deinem Ursprungs-Posting geschrieben :)
[pref:t=55126&m=307346]
Gruesse,
CK
Hallo Stephan-W3Sol,
bei einer SSH-Session kannst Du ein beliebiges Programm
einfach mittels & im Hintergrund laufen lassen,
Korrekt -- und trotzdem bleibt es Mitglied der Prozessgruppe.
so das es nach Beendigung Deiner Session noch weiterläuft.
Tut es eben nicht.
Sendest du ein ordentliches Logout, so wartet die Shell, die
du durch deinen Login gestartet hast, ewig auf die
Beendigung des Prozesses. Damit hast du einen Zombie
erschaffen. Sendest du kein Logout, sondern kappst einfach
die Verbindung, so wird auch der Prozess mit
beendet -- gewaltsam, wenn noetig.
Um unnötige Ausgabe auf Konsolenebene zu vermeiden hilft
auch noch ein > /dev/null
2>&1 > /dev/null waere sinnvoller gewesen.
Gruesse,
CK
Hallo Christian,
bei einer SSH-Session kannst Du ein beliebiges Programm
einfach mittels & im Hintergrund laufen lassen,
Korrekt -- und trotzdem bleibt es Mitglied der Prozessgruppe.
"man nohup"?
Viele Grüße
Michael
Hallo Michael,
bei einer SSH-Session kannst Du ein beliebiges
Programm einfach mittels & im Hintergrund laufen
lassen,
Korrekt -- und trotzdem bleibt es Mitglied der
Prozessgruppe."man nohup"?
Da hilft auch 'nohup' nicht viel :) SIGKILL kann nicht
abgefangen werden.
Gruesse,
CK
Hallo Lin Xiang,
ich habe eine Frage bezüglich PERL. Nämlich will ich einen
Chat basierend auf Socket in PERL programmieren. Ich logge
mich per Telnet (Putty) ein
Also eher per ssh ;)
und will das Chatserver-Skript starten. Es funktioniert.
Glueckwunsch.
Doch sobald ich mich aus Putty ausgeloggt habe, wird das
Skript beendet.
Das liegt am Prozess-Management von Unix-Systemen. Dort wird
bei deinem Login eine Shell gestartet. Alle Befehle, die du
ausfuehrst, sind dann Teil-Prozesse in der Prozess-Gruppe,
die diese Shell aufmacht -- also auch dein Chat-Server. Wird
bei Unix-Systemen ein Root-Prozess beendet (in diesem Fall
wird die Shell durch deinen Logout beendet), so werden auch
alle Teilnehmer-Prozesse beendet. Was du tun musst, ist
folgendes: Du musst dich aus der Prozess-Gruppe, die diese
Shell eroeffnet hat, ausklinken. Das geht in zwei Schritten:
zuerst musst du einen neuen Prozess erstellen, damit die
Shell wieder benutzbar ist. Das machst du am besten mit
fork(). Danach musst du den Eltern-Prozess beenden, per
exit(). Im Kind-Prozess eroeffnest du per setsid() eine neue
Prozess-Gruppe. Danach schliesst du STDIN, STDOUT und STDERR
und bindest sie am besten an Log-Dateien. In Perl koennte das
ganze so aussehen:
use POSIX qw/setsid/;
my $id = fork();
die 'could not fork: '.$! unless defined $pid;
exit if $pid;
die 'couldt not setsid(): '.$! unless setsid();
close STDIN;
close STDOUT;
close STDERR;
open STDOUT,'>>'.$stdout_logfile or exit();
open STDERR,'>>'.$stderr_logfile or exit();
Gruesse,
CK