Beheren van processen

Pagina: 1
Acties:

  • jep
  • Registratie: November 2000
  • Laatst online: 09-02 19:28
Hoi :)

Regelmatig schrijf ik scripts voor mezelf en voor klanten die na een berekening of database-loop een proces starten met bepaalde argumenten. Bijvoorbeeld een stream opnemen. Eerst loop ik door de DB om te kijken welke streams er zijn, daarna check ik met een socketconnectie de statuscode en als die goed is neem ik op met curl (of wget).

Nadat ik deze processen heb aangezet draaien ze allemaal als de gebruiker waarmee ik ze start. Ik zou graag later in het script controleren of een stream nog aanwezig is en indien niet zou ik hem willen killen.

Dan nu het probleem. Alle processen lijken op elkaar, greppen op de url of een ander argument van curl vind ik geen optie. De enige manier die ik tot nu toe steeds gebruik is om per proces een gebruiker aan te maken en hier op te gaan zoeken en die onderuit te trappen.

Dat moet toch anders kunnen? Ik vroeg me af of hier manieren of nette oplossingen voor zijn. Misschien het geven van een soort label die in ps naar voren te halen is, of iets dergelijks. :)

Bedankt!

  • Nick_S
  • Registratie: Juni 2003
  • Nu online

Nick_S

++?????++ Out of Cheese Error

Volgens mij kan dit opgelost worden door tijdens het starten van een proces een bestand aan te maken met het pid. Tijdens het killen van processen kijken of er nog zulke bestanden zijn, het betreffende pid killen en het bestand verwijderen.

Ik kan je helaas niet helpen met de implementatie. Ben geen kei (oftewel noob) op gebied van scripten, maar kijk eens een paar start scripts van andere programma's door)

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • jep
  • Registratie: November 2000
  • Laatst online: 09-02 19:28
Op zich een heel slim idee ja. :) Moet ik alleen even kijken hoe ik de betreffende applicatie een pid laat schrijven. :)

Hmm.. denk dat ik wget/curl hiervoor aan zou moeten passen. Of zijn er bash truuks om 't PID van 't proces dat ik start te verkrijgen? :)

[ Voor 38% gewijzigd door jep op 29-09-2005 10:55 ]


  • Seth4Chaos
  • Registratie: Maart 2001
  • Niet online

Seth4Chaos

that's me...

code:
1
2
3
4
5
6
7
8
9
10
11
12
## Check if running
[ -f ${PID} ] && {
  echo -n "Script still running under pid: "
  cat ${PID}
  exit 1
}

## Remove PID on EXIT
trap 'rm -f ${PID}' EXIT

## Save PID
echo $$ > ${PID}


Dit script (althans wat eronder komt) start ik op vanuit de cron en deze kijkt eerst of er niet een voorganger van hem nog draait (het is een backup dus zou lang kunnen duren).

Volgens mij moet je hier wel verder mee komen, beetje spelen met de naam van het PID bestand
code:
1
PID="/var/run/`basename $0`.pid"
kom je een heel end denk ik.

Mistakes are proof that you are trying...


  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:54
jep schreef op donderdag 29 september 2005 @ 10:48:
Hmm.. denk dat ik wget/curl hiervoor aan zou moeten passen. Of zijn er bash truuks om 't PID van 't proces dat ik start te verkrijgen? :)
Ja dus, als je het uit het ding hierboven nog niet had afgeleid: de variable $$ bevat het PID van het laatst gestartte proces :)

  • jep
  • Registratie: November 2000
  • Laatst online: 09-02 19:28
Woei, dat had ik inderdaad nog niet afgeleid. :) Bedankt!

  • jep
  • Registratie: November 2000
  • Laatst online: 09-02 19:28
free03:/usr/local/kerkweb# sleep 10 &
[1] 30127
free03:/usr/local/kerkweb# echo $$
30098

Dat PID is altijd mijn bash thread, dus daar heb je op die moment denk ik niet zoveel aan. Bovendien hebben al mijn processen childs en gok ik dat 'ie die pid's zal gebruiken.

Zie ik iets over 't hoofd?

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

jep schreef op donderdag 29 september 2005 @ 12:29:
free03:/usr/local/kerkweb# sleep 10 &
[1] 30127
free03:/usr/local/kerkweb# echo $$
30098

Dat PID is altijd mijn bash thread, dus daar heb je op die moment denk ik niet zoveel aan. Bovendien hebben al mijn processen childs en gok ik dat 'ie die pid's zal gebruiken.

Zie ik iets over 't hoofd?
die $$ bevat altijd de PID van het huidige proces.
Dus in je script heeft die een andere waarde als erbuiten :)

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
code:
1
2
3
4
5
~%> sleep 10&
[1] 1954
~%> echo $!                                                                                    1
1954
~%>                                                                                            1

Zoek je dit toevallig?

  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:54
euhh...doh....I suck, ofzo :+
Pagina: 1