старт-стоп-демон не працює як очікувалося, жоден pid файл не був записаний


17

Я намагаюся керувати програмою на основі пітона (яка не відривається від консолі)

#!/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

Стартова частина працює чудово. Я бачу, як сценарій працює і працює, але стоп-частина не працює. Це просто говоритьNo xx found running; none killed.

Тож я думаю, що в стартовій частині щось не так?

Відповіді:


22

start-stop-daemon --start --pidfile "$pid"не записує у файл pid, якщо не вказано --make-pidfile( -m). Без --make-pidfileцього справа залежить від запуску програми для її створення. Також для --make-pidfileроботи процес, який запускається, не може демонструвати себе (вилкою), оскільки тоді start-stop-daemonне буде знати, який PID він повинен містити у файл.

Єдине, що --pidfile "$pid"робиться у вашому сценарії використання, це те, що це призведе до start-stop-daemonне запуску програми, якщо вона вже запущена.


Якщо процес все ще не припиняється, всі відповідні критерії start-stop-daemon --stopповинні відповідати. Значення $pidмає бути запущеним процесом, UID процесу повинен відповідати $user, а ім'я процесу (arg0) має відповідати $name.
Ви можете визначити значення arg0, виконавшиps h -p $pid -o comm


Гаразд, написано pidfile. Але частина зупинки все ще не функціонує, те саме повідомлення про помилку
Дейзі

@ warl0ck правильний pid-файл, і чи відповідає UID процесу $user?
Патрік

Так, я бачив старт-стоп-демон, який намагався прочитати /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326значить, pythonзамість цього може бути назва ?
ромашка

Зроблено, замінене ім'я, pythonі воно спрацювало ;-P
ромашка

Правильно, так, теж $nameмає відповідати. Повністю пропустив те, що ви проїжджали туди. Буде оновлено відповідь.
Патрік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.