Starten einer beliebigen Anwendung als Daemon / Dienst

T

triton_dideldi

Grünschnabel
Hi Forum,

ich bin gerade an der Portierung einer .Net Applikation nach GNU/Linux und Mono. Dabei muß ich einen Windows Dienst portieren, jedoch sind die entsprechenden Namespaces in Mono noch nicht implementiert.
Dienste unter Windows sind dabei nichts anderes als Dämonen unter GNU/Linux. Sie sind mit bestimmten Rechten ausgestattet und werden beim Systemstart geladen und benötigen deshalb keinen angemeldeten Benutzer.

Jetzt meine Frage:

Kann ein beliebiges, von mir entwickeltes Konsolenprogramm wie unten angedeutet als Dienst über ein Start/Stop Skript gestartet werden, oder benötige ich dazu spezielle Basisklassen, usw.

Wenn ja, gibts irgendwo eine FAQ zur erstellen von Startskripten, bin nämlich eine Neuling auf dem Linux Sektor und hab deshalb nicht die Hammererfahrung in der GNU/Linux Systemadministration.

//--------------------------

using System;
..
..
public void Main(string[] args)
{
...
...
...
}

//---------------------------

besten Dank
MfG triton_dideldi
 
Man kann natürlich das in der Sprache in der es geschrieben wurde in den Griff zu bekommen aber es ginge natürlich auch über ein Startscript welches das Programm in den Hintergrund schickt :


Code:
#/bin/bash
case "$1" in
   'start')
      /usr/bin/irgendeinprogramm & ;;
   'stop')
      /bin/killall irgendeinprogramm & ;;
   *)
      echo "usage $0 start|stop" ;;
esac


das wäre die Minimalvariante um soetwas in bash zu bewerkstelligen ..
Generell startet man ein Programm in den Hintergrund mit

Code:
Programm &
 
@triton_dideldi

Doppelpostings sind nicht gestattet !
Ich habe dein 2t Posting mal gelöscht !
 
nohup Programm &

so brauchst du nicht mal die Konsole, stdout und stderr gehen nach nohup.out
 
Schau dir einfach mal die Skripte in /etc/init.d/ an.
 
Hi,
danke für die Tipps, das funktioniert soweit einwandfrei. Allerdings habe ich jetzt ein weiteres Problem.

Ich habe jetzt folgendes Skript geschrieben:

1#/bin/bash
2
3 case "$1" in
4 'start')
5 /usr/bin/mono MonoServiceTest.exe &
6 ;;
7 'stop')
8 /usr/bin/killall /usr/bin/mono &
9 ;;
10 *)
11 echo "usage $0 start|stop"
12 ;;
13 esac

Mal angenommen ich starte jetzt einen Dienst über dieses Skript und zusätzlich noch eine andere Mono Anwendung. Wenn ich jetzt den Dienst über das Skript beende, werden alle Programme, die unter Mono laufen beendet und das ist nicht so gut.

Wenn ich unter 'stop') "/usr/bin/killall /usr/bin/mono MonoServiceTest.exe & eintrag, dann bekomme ich die Fehlermeldung "MonoServiceTest.exe: no process killed"

Wie kann ich denn nur den Dienst, den ich per Skript gestartet habe auch wieder beenden.
Ich hätte mir gedacht, dass ich in einer Datei die ich nach /tmp oder so lege, beim Start die PID schreibe und beim Beenden diese wieder auslese und speziell diese PID dann beende.
Ist das sinnvoll, oder gibt es bessere Möglichkeiten.

MfG triton_dideldi

PS: Doppelposting kommt nicht mehr vor. Sorry.
 
Zuletzt bearbeitet:

Ähnliche Themen

Linux Systemadministration v. Jochen Hein

Zurück
Oben