Vraag & Antwoord
Het beeingigen van een proces in een init script
7 antwoorden
- Ik heb een aantal eigen init-scripts gemaakt. Maar nu bij stoppen de processen niet als ik het scritpdcommando stop geef. Wat heb ik mis gedaan?
<begin>
#! /bin/bash
#
# /etc/icecast
#
. etc/init.d/functions
case "$1" in
start)
echo "Starting Webmail server"
/usr/lib/webmail-0.7.6/bin/webmail.sh </dev/null >/dev/null 2>&1 &
;;
stop)
echo "Shutting Webmail server"
kill /usr/lib/webmail-0.7.6/bin/webmail.sh
echo
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
<end> - >kill /usr/lib/webmail-0.7.6/bin/webmail.sh
Dit is niet de manier volgens mij…. - M.a.w. Je kunt geen programma 'killen' maar alleen proces-id's.
Zie bijvoorbeeld onderstaand script dat yes kan starten en stoppen:
#!/bin/ksh
case "$1" in
start)
echo "Starting yes"
yes
;;
stop)
echo "Shut yes down"
export PID=`ps -a |grep yes |awk '{print $1}'`
kill $PID
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
<end>
NB: Dit is een ksh script. Controleer eerst in bash of met name
export PID=`ps -a |grep yes |awk '{print $1}'`
inderddaad het PID oplevert. - je moet inderdaad de proces-id vinden om een programma te killen. (je kan ook killall gebruiken (dat killt alle processen van die naam), maar dat zal iets te rigoreus zijn op sommige systemen.) Zie man kill en man killall.
de PID kun je achterhalen zoals jhb schrijft, maar daar zitten wat foutjes in:
je moet doen:
PID=`ps -a |grep yes|grep -v grep|awk '{print $1}'`
anders wordt 'grep yes' ook gevonden en gekilld. grep -v haalt regels met grep erin er weer uit.
verder hoef je PID niet in de environment te zetten met 'export'.
Er zijn ook veel serverapps die zelf hun PID ergens saven, bijvoorbeeld in een /var/run/blablabla.pid file. Kijk daar maar eens in, vaak kan je iets doen als [b:d3a66abcfb]kill `cat /var/run/service_bla.pid`[/b:d3a66abcfb]
succes! - Ik zou dat geen foutjes willen noemen.
In de ksh (oa AIX) grept 'ps -a | grep ..' zichzelf niet (zie ook laatste opmerking in mijn antwoord).
En over doen van wel of geen export, valt ook te discussieren. Misschien wil je nog iets meer met die variabele vanuit een andere shell of script(logging bv)? - [quote:8d727546ab="jhb"]Ik zou dat geen foutjes willen noemen.
In de ksh (oa AIX) grept 'ps -a | grep ..' zichzelf niet (zie ook laatste opmerking in mijn antwoord). [/quote:8d727546ab]
Hoi jhb, dat wist ik niet, sorry! Bij mij grept grep zichzelf soms nét wel, soms nét niet :-)
Ik probeer het nu trouwens even, maar hij grept zichzelf inderdaad nooit. Hoe kan dat? Bash start de processen in een pipeline toch direct na elkaar op? ps -a zou dan soms de grep yes al te zien moeten krijgen.
groetjes, - Het lijkt erop dat grep zichzelf alleen grept als je de -f optie gebruikt.
(dus ps -af of ps -ef). De -f optie toont alle processen inclusief de 'family'. Waarschijnlijk wordt de grep in een subshell uitgevord, waarvan het pid niet wordt getoond met ps -a of ps -e maar wel met ps -af of ps -ef.
Blijf nog één vraag: waarom grept 'ps -ef|grep yes' zichzelf soms niet en soms wel? Je zou verwachten dat het zichzelf altijd zou vinden.
Beantwoord deze vraag
Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.
Gerelateerde vragen
- URL zonder extensie wil niet helemaal lukken
- https verbinding met ssl in owncloud
- afspelen met audacity werkt niet goed
- Computer!Totaal-forum maakt plaats voor v&a-module
- computer start soms niet op
- Pro show gold 4 overgangen tussen tekstdia's
- wie kan mij meer vertellen over een Gigabyte GA-B85M-HD3
- Windows Tijdelijke bestanden