TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
mcxm
Posts: 14
Joined: 2009-09-10 11:24

TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Post by mcxm » 2009-10-07 10:30

Hallo,

ich nutze den TCPSERVER mit dem Startkommando:

Code: Select all

tcpserver -x/etc/tcp.smtp.cdb -u2020 -g2020 0 smtp /var/qmail/bin/qmail-smtpd &


Das funktioniert auch wenn ich den tcpserver als root auf der Console starte.

--------------------
In der letzten Zeit ist es jedoch vorgekommen das der tcpserver Dienst offensichtlich stoppt.

Wenn ich den tcpserver wieder über die Console mit dem obigen Kommando starte geht er auch wieder.

--------------------
Dazu habe ich ein paar Fragen

1. Woran kann es liegen das der tcpserver von selbst abschaltet ? Wo finde ich ein evtl. Log mit Hinweisen ?

2. Wie kann ich den tcpserver mit dem obigen Kommando automatisch im Fall einen Neustarts starten lassen ?
- PS. Habe Versuch den Aufruf per Cron minütlich durchzuführen, jedoch funktioniert das nicht, erst wenn ich als root auf der Console bin und das Kommando manuell ausführe funktioniert der Aufruf. ?

Vielen Dank für Eure Hilfe !

Gruß

Markus

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Post by daemotron » 2009-10-07 20:03

mcxm wrote:1. Woran kann es liegen das der tcpserver von selbst abschaltet ? Wo finde ich ein evtl. Log mit Hinweisen ?

Du startest den Prozess als Hintergrundprozess (durch das angehängte &). Dieser Prozess ist aber immer noch mit dem Terminal verknüpft, von dem aus er gestartet wurde (üblicherweise bei SSH-Zugriff eines der ttypx-Terminals), vor allem aber mit Deiner Session (Session-Leader ist bei interaktiven Sitzungen i. d. R. der zugehörige Shell-Prozess). Wenn Du Dich ausloggst, wird der Session Leader beendet, was Prozesse der betroffenen Session normalerweise nicht lange überleben.

mcxm wrote:2. Wie kann ich den tcpserver mit dem obigen Kommando automatisch im Fall einen Neustarts starten lassen ?

Keine Gute Idee - besser wäre es, den Prozess auf andere Weise zu starten, um dafür zu sorgen, dass er als Kindprozess des Init-Prozesses läuft. Am einfachsten schreibst Du Dir ein kleines Skript passend zum Init-System Deines Betriebssystems.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Post by Joe User » 2009-10-07 22:16

Es sei an dieser Stelle auch noch auf XInetd hingewiesen...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Post by daemotron » 2009-10-09 22:01

matzewe01 wrote:Eine Möglichkeit wäre, den Prozess im screen laufen zu lassen.

`man screen`


Ja , Programme wie screen oder tmux (halte ich persönlich für eine sehr gute Alternative zu screen) "befreien" sich aus dem Session Context (genau wie ein Daemon-Prozess das auch tut) und sterben deswegen nicht, wenn die Session geschlossen wird. Der Nachteil bei solchen Konstrukten ist allerdings, dass der Prozess immer manuell angestoßen werden muss (z. B. nach einem Reboot wg. Kernel-Update o. ä.) und nicht automatisch mit dem System im entsprechenden Runlevel hochgefahren wird. Für Dienste würde ich deswegen immer die Variante über das init-System bevorzugen.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Post by daemotron » 2009-10-10 10:14

matzewe01 wrote::D Ih weiss was Du meinst aber ob das andere auch so sehen ? :D

Die GNU Piepels mit Sicherheit nicht :wink:

matzewe01 wrote:Nur jemand der nicht weiss, wie er einen Prozess aus einer Session / Terminal löst,

Ooch, was ist an

Code: Select all

fork();
setsid();
fork();

so kompliziert?

matzewe01 wrote:Warum Ich screen vorgeschlagen habe, hat vor allem den Grund:
Dann sieht man u.U. auch mal was der Dömäon an die Console weiter gibt.
Ist manchmal für eine Fehlersuche recht aufschlussreich.
(Viele der Dienste welche ohne init.d etc. Scripte ausgeliefert werden beherschen auch oft kein anständiges Logging.
Das wiederum im init Script "auszugleichen" eine lästige Sache.

Full ACK. Allerdings würde ich jeden Programmier-Lehrling an den E...^W Füßen aufhängen, der mir einen "Daemon" präsentiert, der noch nach stdin/stdout schreibt (wie denn, wenn er kein Terminal mehr hat?). Ist aber (leider) eine weit verbreitete Unsitte, gerade bei Blobs von diversen Gameservern...

Aber um nicht ganz OT zu landen: es gibt noch eine weitere Alternative für das o. g. Problem. Einige Linux-Distributionen (von Gentoo, Debian und Ubuntu weiß ich es sicher) bringen das Werkzeug start-stop-daemon mit. Dieses kleine Tool ist recht nützlich; wenn man es mit der Option -b aufruft, daemonisiert es sich beim starten und wechselt auf Wunsch auch noch den User- Gruppen- und root-Kontext, bevor es das eigentlich zu startende Programm als Kindprozess seiner selbst startet, womit dieses eben all die gesetzten Eigenschaften erbt (keine Terminal-Bindung etc.).
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
Joe User
Project Manager
Project Manager
Posts: 11578
Joined: 2003-02-27 01:00
Location: Hamburg

Re: TCPSERVER stellt Dienst ein und wird auch nicht automatisch neugestartet

Post by Joe User » 2009-10-10 10:52

Joe User wrote:Es sei an dieser Stelle auch noch auf XInetd hingewiesen...

Habt Ihr XInetd vergessen, oder warum macht Ihr Euch Gedanken zu so kranken Lösungen wie Screen? :roll:
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.