Vraag & Antwoord

OS Linux

[gentoo] beeindigen van een proces in een cron

Anoniem
dJeedJee
2 antwoorden
  • Ik heb een proces die automatisch opstart. Na twee uur wil ik hem weer stoppen. Hij start op in een cron-job. Maar hoe stop ik hem nu weer?

    Ik zat te denken aan een kill -pid. Maar nu veranderd de -pid steeds. De procesnaam blijft hetzelfde. Hoe kom ik achter de -pid van een procesnaam en hoe stuur ik deze waarde door naar de kill -pid.
  • er zijn grofweg drie manieren.

    1. killall (onder Linux, niet andere Unixen!): killall blackbox killt alle processen met de naam blackbox. Heeft je proces dus een duidelijk herkenbare naam, en weet je zeker dat er nooit onbedoeld andere processen met die naam draaien, dan kan dat.

    2. het programma start-stop-daemon uit het pakketje debianutils. Zie man start-stop-daemon. Erg handig, misschien wel de beste methode.

    3. de $! variabele van bash. schrijf een startscriptje voor je cron-taak:

    [code:1:bb77e81002]
    # start proces
    startproces argument blabla blaat &

    # de $! variabele bevat de pid van het laatst gestarte proces.
    echo $! > /var/run/blaat.pid
    [/code:1:bb77e81002]

    stoppen kan dan zo:

    [code:1:bb77e81002]
    # stop proces
    kill `cat /var/run/blaat.pid`
    rm -f /var/run/blaat.pid
    [/code:1:bb77e81002]

    of, netter:

    [code:1:bb77e81002]
    # stop proces
    if test -r /var/run/blaat.pid; then
    kill `cat /var/run/blaat.pid`
    rm -f /var/run/blaat.pid
    fi
    [/code:1:bb77e81002]


    Waar je wel op moet letten bij deze startconstructie, is of het proces niet zelf nog een keer een fork(2) uitvoert. In dat geval klopt de PID natuurlijk niet meer. Dit soort dingen werkt dus niet zomaar bij MySQL of Apache. Maar deze servertoepassingen hebben altijd wel hun eigen start-stop technieken. Raadpleeg daarvoor de documentatie.


    Verder kun je natuurlijk altijd met ps|grep|awk constructies gaan prutsen.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.