Changes between Initial Version and Version 1 of SynServices


Ignore:
Timestamp:
08/08/08 00:10:41 (16 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SynServices

    v1 v1  
     1= Syn-3 services =
     2
     3Alle Syn-3 services draaien onder daemon tools. Dit systeem zorgt voor het starten en stoppen van de services, en zorgt ook dat een service geherstart word als hij onverwachts stopt.
     4
     5Daemontools: source:trunk/npl/commonservers/daemontools
     6
     7= Beheerders frontend =
     8
     9Het beheren door de administrator kan via de SCC en rechstreeks via de daarvoor aanwezige 'frontend' scripts.
     10
     11Een service naam is bijvoorbeeld '''/service/squid'''.
     12
     13Als een service bij een reboot NIET gestart moet worden dient men de file /service/''servicenaam''/down aan te maken. Alle andere services worden wel gestart bij een reboot.
     14
     15 * '''svcstart ''servicenaam''''' -- Start de service, en controleert of de service correct loopt. Keert terug met exit 0 als de service goed loopt, anders exit 1
     16 * '''svcstop ''servicenaam''''' -- Stopt de service en controleert of hij ook echt gestopt is. Keert terug met exit 0 als de service gestopt is, anders exit 1.
     17 * '''svcreset ''servicenaam''''' -- Reset de service naar de oorspronkelijke status. Dus hij doet svcstart als hij hoort te lopen en svcstop als hij down hoort te zijn. (als /service/''servicenaam''/down bestaat dus)
     18 * '''svcrestart ''servicenaam''''' -- Restart de service (Dus doet svcstop/start), maar ALLEEN als deze reeds loopt.
     19 * '''svstat ''servicenaam''''' -- Huidige status en uptime van een service weergeven.
     20
     21Als men de services bedient via de SCC word automatisch een '''/service/''servicenaam''/down''' aangemaakt of verwijderd, zodat de status bij een reboot gelijk blijft.
     22 
     23= Packaging en backend =
     24
     25Om een service te draaien maak je normaal een run-script aan in '''/service/''servicenaam''/run'''.
     26Voorbeeld van een run-script dat de service onder een andere user draait:
     27
     28{{{
     29#!/bin/bash
     30doe-dingen-ter-voorbereiding...
     31exec su - username -c "/usr/bin/programma parameters"
     32}}}
     33
     34of (betere methode):
     35
     36{{{
     37#!/bin/bash
     38doe-dingen-ter-voorbereiding...
     39exec setuidgid username /usr/bin/programma parameters
     40}}}
     41
     42In een run script moet de service die uitgevoerd word op de voorgrond blijven draaien. Hier zijn vaak speciale parameters voor nodig. Als dit niet mogelijk is kan het programma ''fghack'' gebruikt. Dus fghack /usr/bin/programma.
     43
     44De exec is nodig om te voorkomen dat er geen extra bash shell draait.
     45
     46Vergeet niet om het run-script executable te maken!
     47
     48Andere handige deamontools hulp programmas:
     49 * http://cr.yp.to/daemontools/softlimit.html -- Stel limieten in voor memory/disk/cpu gebruik.
     50 * http://cr.yp.to/daemontools/setlock.html -- Hulptool om files te locken
     51 * http://cr.yp.to/daemontools/multilog.html -- Vangt de stdout/stderror van het script af en logt dit.
     52
     53
     54
     55== Controleren of je het goed gedaan hebt ==
     56
     57=== Start problemen ===
     58
     59Probeer de eerste keer het script te starten en stoppen met svcstart en svcstop en kijk of alles goed gaat. Zo zien services er uit:
     60{{{
     61 6166 tty1     Ss+    0:00 /bin/sh /usr/bin/svscanboot
     62 6219 tty1     S+     0:00  \_ svscan /service
     63 6224 tty1     S+     0:00  |   \_ supervise amavis
     64 6229 ?        Ss     0:00  |   |   \_ amavisd (master)
     6510101 ?        S      0:00  |   |       \_ amavisd (ch9-avail)
     66 1724 ?        S      0:00  |   |       \_ amavisd (ch8-avail)
     6712935 ?        S      0:00  |   |       \_ amavisd (ch6-avail)
     6818906 ?        S      0:00  |   |       \_ amavisd (ch3-avail)
     69 4587 ?        S      0:00  |   |       \_ amavisd (virgin child)
     70 6225 tty1     S+     0:00  |   \_ supervise log
     71 6233 tty1     S+     0:00  |   |   \_ multilog t s250000 ./main
     72 6226 tty1     S+     0:00  |   \_ supervise apache2
     73 6227 ?        Ss     0:01  |   |   \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     74 6704 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     75 6705 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     76 6706 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     77 6707 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     78 6740 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     7911192 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     8030577 ?        S      0:00  |   |       \_ /usr/sbin/httpd -f /etc/apache2/httpd.conf -D NO_DETACH -D FOREGROUND
     81.....etc....
     82 6220 tty1     S+     1:25  \_ readproctitle service errors: ...known id: download?Unknown id: download?Unknown id: downl
     83}}}
     84
     85Iedere service krijgt dus automatisch zn eigen supervise toegevewezen. Zodra een service crashed of afsluit word deze binnen een seconde gerestart. Aan het pid of met svstat kun je zien of de service wel up blijft.
     86
     87Output die van een script komt word afgevangen door readproc title:
     88{{{
     89[Syn-3] root@kantoor.datux.nl ~# ps fax |grep readproc
     9014806 pts/0    S+     0:00          \_ grep readproc
     91 6220 tty1     S+     1:25  \_ readproctitle service errors: ...known id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?Unknown id: download?
     92}}}
     93
     94Dit kan je gebruiken om een steeds crashende service te debuggen. Ook kan het handig zijn om het run-script dat problemen geeft direkt te starten zodat je de output beter ziet:
     95{{{
     96[Syn-3] root@kantoor.datux.nl ~# svcstop /service/mldonkey/
     97Stopping /service/mldonkey/ ....OK
     98[Syn-3] root@kantoor.datux.nl ~# /service/mldonkey/run
     99'''Unknown id: download'''
     100[Syn-3] root@kantoor.datux.nl ~# cat /service/mldonkey/run
     101#!/bin/bash
     102rm ~download/.mldonkey/*tmp &>/dev/null
     103ulimit -n 10000
     104exec su - download -c "mldonkey -allowed_ips 255.255.255.255"
     105}}}
     106
     107In dit geval was het probleem dat de user ''download'' niet bestond. (Deze moet normaal automatisch worden aangemaakt in het postinstall script.)
     108
     109=== Stop problemen ===
     110
     111Soms is het zo dat een service niet correct afsluit als je svcstop doet en onder daemon tools wegvalt. Hij zal dan onderaan de process list staan. Meestal komt dit doordat je een exec vergeet. Soms restart het programma in een andere session, daarvoor kan je pgrphack gebruiken. (op dezelfde manier als fghack).
     112
     113Het kan ook zijn dat je ander wrapper script aanroept (en niet rechtstreeks de binary), zoals bij safe_mysqld. Kijk in het mysql runscript voor een voorbeeld hoe je dit kan oplossen.
     114
     115== Start/stop controle scripts ==
     116
     117Als je wilt dat svcstart pas terug keert nadat de service getest op correcte werking maak je een start script. Zon script zet je in '''/service/''servicenaam''/start'''.
     118
     119Dit is een voorbeeld van /service/slapd/start:
     120{{{
     121#!/bin/bash
     122TRY=15
     123svc -u /service/slapd
     124while ! ldapwhoami -h 127.0.0.1 &>/dev/null; do
     125    echo "Waiting for slapd to start.. ($TRY)"
     126    sleep 5
     127    (( TRY-- ))
     128    if [ $TRY -eq 0 ]; then
     129                syn3-state slapd CAUTION "Startup error"
     130                svc -d /service/slapd
     131                exit 1
     132    fi
     133done
     134syn3-state slapd OK "Started"
     135}}}
     136
     137Het start script word aangeroepen als men svcstart gebruikt. Het script is op dat moment verantwoordelijk voor het starten van de service via het backend svc-commando.
     138 * Het script moet herhaaldelijk controleren of de service correct draait en dan exitten met code 0 als dit het geval is.
     139 * Als de service na een bepaald tijd nog niet draait moet de service weer down en het script exitten met code 1.
     140
     141Hierdoor weet svcstart dat het gelukt of mislukt is en kan dit doorgeven aan de hogerliggende scripts.
     142
     143Ook is dit de juiste plaats om monitoring meldingen van de destbetreffende services in op te slaan. (Zie SynMonitor)
     144
     145Op een zelfde manier kan een service ook een stop script maken in '''/service/''servicenaam''/stop'''.
     146
     147''Notities edwin: Het streven is om alle services degelijke scripts te geven, zodat het systeem zichzelf monitored bij het starten van services. svstart is nu een wrapper dat de start-scripts aanroept, maar ik wil eigenlijk nog een patch maken voor daemontools, zodat deze dit zelf ondesteund, dus ook bij de automatische herstart van een crashende service. Misschien moet hij een crashende service zelfs melden bij het monitoring systeem.''
     148
     149=== svc (backend tool) ===
     150
     151svc word normaal alleen aangeroepen door deze start/stop wrapper-scripts en niet door de eind gebruiker zelf:
     152
     153{{{
     154svc opts services
     155
     156opts is a series of getopt-style options. services consists of any number of arguments, each argument naming a directory used by supervise.
     157svc applies all the options to each service in turn. Here are the options:
     158-u: Up. If the service is not running, start it. If the service stops, restart it.
     159-d: Down. If the service is running, send it a TERM signal and then a CONT signal. After it stops, do not restart it.
     160-o: Once. If the service is not running, start it. Do not restart it if it stops.
     161-p: Pause. Send the service a STOP signal.
     162-c: Continue. Send the service a CONT signal.
     163-h: Hangup. Send the service a HUP signal.
     164-a: Alarm. Send the service an ALRM signal.
     165-i: Interrupt. Send the service an INT signal.
     166-t: Terminate. Send the service a TERM signal.
     167-k: Kill. Send the service a KILL signal.
     168-x: Exit. supervise will exit as soon as the service is down. If you use this option on a stable system, you're doing something wrong; supervise is designed to run forever.
     169}}}
     170
     171
     172
     173