start-stop-daemon không hoạt động như mong đợi, không có tệp pid nào được viết


17

Tôi đang cố gắng kiểm soát một chương trình dựa trên python (không tách rời khỏi bảng điều khiển)

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

Phần bắt đầu hoạt động tốt. Tôi có thể thấy tập lệnh lên và chạy, nhưng phần dừng thì không. Nó chỉ đơn giản nóiNo xx found running; none killed.

Vì vậy, tôi đoán có điều gì đó sai với phần bắt đầu?

Câu trả lời:


22

start-stop-daemon --start --pidfile "$pid"không ghi vào tệp pid trừ khi --make-pidfile( -m) được chỉ định. Không có --make-pidfilenó là tùy thuộc vào chương trình được đưa ra để tạo ra nó. Ngoài ra, --make-pidfileđể hoạt động, quá trình được khởi chạy không thể tự khởi động (thông qua một ngã ba), vì sau đó start-stop-daemonsẽ không biết nên đặt PID nào trong tệp.

Điều duy nhất --pidfile "$pid"làm trong kịch bản sử dụng của bạn là nó sẽ dẫn đến việc start-stop-daemonkhông khởi động chương trình nếu nó đang chạy.


Nếu quá trình vẫn không dừng lại, tất cả các tiêu chí được thông qua start-stop-daemon --stopphải phù hợp. Ý nghĩa $pidphải là một quy trình đang chạy, UID của quy trình phải khớp $uservà tên quy trình (arg0) phải khớp $name.
Bạn có thể xác định giá trị của arg0 bằng cách thực hiệnps h -p $pid -o comm


Được rồi, pidfile được viết. Nhưng phần dừng vẫn không hoạt động, cùng một thông báo lỗi
daisy

@ warl0ck là tệp pid đúng và UID của quy trình có khớp $userkhông?
Patrick

Vâng, tôi thấy start-stop-daemon đã cố đọc /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326vậy pythoncó lẽ nên đặt tên ?
cúc

Xong, tên được thay thế pythonvà nó hoạt động ;-P
daisy

Phải, đúng, $namephải phù hợp quá. Hoàn toàn bỏ lỡ rằng bạn đã vượt qua nó. Sẽ cập nhật câu trả lời.
Patrick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.