demon start-stop nie działa zgodnie z oczekiwaniami, nie zapisano pliku pid

17

Próbuję kontrolować program oparty na języku Python (który nie odłącza się od konsoli)

#!/bin/bash

user=nobody
pid=/var/run/xx.pid
name=xx
prog=/xx.py

case $1 in
    start)
        /sbin/start-stop-daemon --start -b --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" --chuid nobody -- --daemon
        ;;
    stop)
        /sbin/start-stop-daemon --stop --oknodo --user "$user" --name "$name" --pidfile "$pid" --retry=TERM/5/KILL/1
        ;;
    restart)
        ;;
    *)
        ;;
esac

Część początkowa działa dobrze. Widzę skrypt gotowy do działania, ale część stop nie. To po prostu mówiNo xx found running; none killed.

Więc myślę, że coś jest nie tak z częścią początkową?

stokrotka
źródło

Odpowiedzi:

22

start-stop-daemon --start --pidfile "$pid"nie zapisuje do pliku pid, chyba że podano --make-pidfile( -m). Bez --make-pidfiletego program jest uruchamiany, aby go utworzyć. Również --make-pidfiledo pracy, proces nie może być uruchomiona daemonize się (za pomocą widelca), a następnie start-stop-daemonnie będzie wiedział, co PID należy umieścić w pliku.

Jedyne, co --pidfile "$pid"dzieje się w twoim scenariuszu użytkowania, polega na tym, że start-stop-daemonnie uruchomi programu, jeśli jest już uruchomiony.


Jeśli proces nadal się nie zatrzymuje, wszystkie kryteria, które spełniają, start-stop-daemon --stopmuszą być zgodne. Znaczenie $pidmusi być uruchomionym procesem, identyfikator UID procesu musi być zgodny $user, a nazwa procesu (arg0) musi być zgodna $name.
Możesz ustalić wartość arg0, wykonującps h -p $pid -o comm

Patrick
źródło
Ok, plik pid jest zapisany. Ale zatrzymaj część nadal nie działa, ten sam komunikat o błędzie
daisy
@ warl0ck czy plik pid jest poprawny i czy identyfikator UID procesu jest zgodny $user?
Patrick,
Tak, widziałem, że demon start-stop próbował czytać /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326więc pythonmoże zamiast tego powinna to być nazwa ?
stokrotka
Gotowe, zastąpiono nazwę pythoni zadziałało ;-P
stokrotka
Tak, tak, też $namemusi pasować. Całkowicie spóźniłeś się, że to przekazałeś. Zaktualizuje odpowiedź.
Patrick