Koe als "service" onder Linux

Pagina: 1
Acties:
  • 147 views sinds 30-01-2008
  • Reageer

  • Trema
  • Registratie: Februari 2000
  • Niet online

Trema

Het kost wat

Topicstarter
Ik ben al een tijdje bezig met het inrichten van een Linux-server. Daarop moet natuurlijk ook een koetje komen te grazen. Hiervoor heb ik een aparte gebruiker aangemaakt. Hoe krijg ik het voor elkaar dat de koe begint als het systeem start en "netjes" stopt als het systeem down gaat, zonder dat ik er verder omkijken naar heb? Vergelijkbaar dus met de -install optie onder Windows.

  • [J.d.I.] Exploder
  • Registratie: December 1999
  • Laatst online: 23-05 12:40
Ik heb gewoon in mijn rc.local de regel

nohup /dnetcdir/dnetc &

Als je het systeem stopt (? wat is dat?? dat kan natuurlijk niet.. behalve voor hardware upgrades! ;) ) dan wordt dnetc ook netjes afgesloten. dat gaat gewoon automatisch..

  • Onno
  • Registratie: Juni 1999
  • Niet online
Uhm... waarom niet gewoon dnetc -hide/quiet?

  • Trema
  • Registratie: Februari 2000
  • Niet online

Trema

Het kost wat

Topicstarter
Bedankt! Ik zat ook al aan rc.local te denken. Maar met welke rechten graast die koe nu? Als root? Ik wil 'm liefst gewoon als aparte gebruiker draaien. Moet ik dan iets met de permissies doen? (Iets met Effective User ID ofzo?)

En o ja: die server draait (nog) niet 24/7. Dat komt nog komende winter, als we ADSL krijgen. Dan gaat ook m'n 486SX 25Mhz (!) weer meedoen. (Totdat-ie z'n laatste adem uitblaast.)

  • Trema
  • Registratie: Februari 2000
  • Niet online

Trema

Het kost wat

Topicstarter
Ik denk dat het zo zit: "dnetc -hide/quiet" kan ook, maar tijdens het down-brengen van het systeem wordt het proces dan gewoon gekilled, zonder dat hij de kans krijgt z'n buffers te saven. Via rc.local is dus wat eleganter/veiliger.

  • [J.d.I.] Exploder
  • Registratie: December 1999
  • Laatst online: 23-05 12:40
Met die regel van mij draait ie inderdaad als root (ik ben er nog niet achter hoe je het als andere user kan draaien). En ik gebruik die nohup eigenlijk omdat als ik hem met de hand start ik wil dat ie doordraait als ik mijn Xterm sluit. nohup had iets iets te maken met dat het niet zomaar afgesloten kon worden.

Als je je systeem afsluit dan stuurt ie volgens mij gewoon een TERM signaal naar alle processen en dus ook naar dnetc, en die reageert daar volgens mij netjes op en saved zijn blokies dan nog (correct me if i'm wrong, want ik zet hem nooit uit).

  • [J.d.I.] Exploder
  • Registratie: December 1999
  • Laatst online: 23-05 12:40
en als dat niet werkt dan moet je een script maken dat dnetc -shutdown doet tijdens het afsluiten, net zoals alle andere taken. (dus in runlevel 6)

  • Trema
  • Registratie: Februari 2000
  • Niet online

Trema

Het kost wat

Topicstarter
Hmm, genoeg ideeën om weer eens even te experimenteren vanavond. Als ik iets moois bedacht heb, laat ik het weten.

  • Onno
  • Registratie: Juni 1999
  • Niet online
En ik gebruik die nohup eigenlijk omdat als ik hem met de hand start ik wil dat ie doordraait als ik mijn Xterm sluit. nohup had iets iets te maken met dat het niet zomaar afgesloten kon worden.
Ja maar... dat is ook zo als je gewoon dnetc -hide/quiet in rc.local zet...
En inderdaad is het zo dat dnetc netjes wordt afgesloten, hoe je 'm ook gestart hebt.

Als andere user draaien:

chown andereuser.group dnetc
chmod +s dnetc

(en dan moet je er natuurlijk wel even voor zorgen dat die user lees-/schrijfrechten heeft in de directory waar het .ini-bestand en de buffers staan)

Verwijderd

rc.local ???

smells like RedHat(Crap) flavor....

/me rent gillend weg

Verwijderd

Ik heb laatst ook een 486SX 25Mhz ingeschakeld, die dingen doen maar 28 kkeys/sec hoor :)

  • Hans
  • Registratie: Juni 1999
  • Niet online
Hilander: sorry hoor, maar rc.local is meer Slackware style. RedHat gebruikt Sysvinit met runlevels enzo..

Je kan trouwens vanuit je rc.local je moo client opstarten als een andere userid met zoiets:

/bin/su hans -c /home/hans/dnetc

Werkt als een dolle stier ;)

  • Mior
  • Registratie: Maart 2000
  • Laatst online: 26-05 20:19
rc.local ???
smells like RedHat(Crap) flavor....

/me rent gillend weg
?

Verwijderd

/usr/bin/screen /usr/local/dnetc/dnetc >/dev/null 2>&1 &

in rc.local, werkt perfect

  • Trema
  • Registratie: Februari 2000
  • Niet online

Trema

Het kost wat

Topicstarter
Om te beginnen heb ik een aparte user, "dnetc", aangemaakt. In de home-directory van deze user is de programmatuur geinstalleerd. De client moet met de rechten van deze user zijn werk doen. Waarom? Dat is een aparte discussie, maar in het kort ben ik van mening dat je elke taak op een Unix-box met zo m'n mogelijk rechten moet uitvoeren. Dat komt de veiligheid ten goede en vermindert de foutkans.
Ok, terug naar de koe. Het is de bedoeling dat deze automatisch gestart en gestopt wordt als het systeem resp. up en down gaat.
Hieronder volgen de twee methoden die ik op mijn systeem (RedHat 6.2) getest heb.
Methode 1: start de client vanuit rc.local:
Regel toevoegen aan rc.local:
/bin/su -s /bin/sh -c /home/dnetc/dnetcd dnetc
Met deze regel wordt het script dnetcd in de /home/dnetc opgestart in een /bin/sh shell met de rechten van user dnetc.
* Waarom in een shell? - Anders kreeg ik een foutmelding over rechten op een of ander configuratiebestand van bash.
* Waarom niet direct dnetc opstarten, maar via een omweg? - In dnetcd start ik dnetc op met de parameter -quiet. Als ik die parameter aan de regel hierboven meegeef, denkt su dat het een eigen parameter is (en herkent deze niet).
En zo ziet het bestand /home/dnetc/dnetcd eruit:
/home/dnetc/dnetc -quiet
(Niet vergeten de permissies goed te zetten!)

Methode 2: toevoegen aan het standaard initialisatie-proces (zoals aangedragen door Black Goeroe in dit topic: http://gathering.tweakers.net/Forum8/HTML/001793.html ):
In dit geval heb ik in de directory /etc/rc.d/init.d het script van httpd gecopieerd en aangepast.
#!/bin/sh
#
# Startup script voor de Distributed Net koe
#
# chkconfig: 345 85 15
# description: De koe van Distributed Net graast RC5-blokjes
# processname: dnetc
# pidfile: /var/run/dnetc.pid

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
start)
echo -n "Haal de koe van stal: "
daemon --user dnetc /home/dnetc/dnetc -quiet
echo
;;
stop)
echo -n "Zet de koe op stal: "
killproc dnetc
echo
rm -f /var/run/dnetc.pid
;;
status)
status dnetc
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Geef de koe een schop: "
killproc dnetc -HUP
echo
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac

exit 0
Gesaved onder de naam "dnetc", geef vervolgens het commando "chkconfig dnetc on". Je kunt het nu testen (dnetc start, dnetc stop, etc.) en bij het rebooten zie je dat de koe door het systeem zelf van stal wordt gehaald.
Bedankt voor de suggesties van iedereen en wie op- of aanvullingen heeft mag het zeggen.
Pagina: 1