start-stop-daemon tidak berfungsi seperti yang diharapkan, tidak ada file pid yang ditulis

17

Saya mencoba untuk mengendalikan program berbasis python (yang tidak melepaskan diri dari konsol)

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

Bagian awal berfungsi dengan baik. Saya bisa melihat skrip dan menjalankan, tetapi bagian berhenti tidak. Itu hanya mengatakanNo xx found running; none killed.

Jadi saya kira ada yang salah dengan bagian awalnya?

bunga aster
sumber

Jawaban:

22

start-stop-daemon --start --pidfile "$pid"tidak menulis ke file pid kecuali --make-pidfile( -m) ditentukan. Tanpa --make-pidfileitu terserah program yang diluncurkan untuk membuatnya. Juga untuk --make-pidfilebekerja, proses yang diluncurkan tidak dapat mengubah sendiri (melalui garpu), karena kemudian start-stop-daemontidak akan tahu PID apa yang harus dimasukkan ke dalam file.

Satu-satunya hal yang --pidfile "$pid"dilakukan dalam skenario penggunaan Anda adalah itu akan menghasilkan start-stop-daemontidak memulai program jika sudah berjalan.


Jika proses masih tidak berhenti, semua kriteria yang diteruskan start-stop-daemon --stopharus cocok. Artinya $pidharus proses yang berjalan, UID dari proses harus cocok $user, dan nama proses (arg0) harus cocok $name.
Anda dapat menentukan nilai arg0 dengan melakukanps h -p $pid -o comm

Patrick
sumber
Oke pidfile ditulis. Tapi hentikan sebagian masih tidak berfungsi, pesan kesalahan yang sama
daisy
@ warl0ck apakah file pid benar, dan apakah UID dari proses cocok $user?
Patrick
Ya, saya melihat start-stop-daemon mencoba membaca /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326, sehingga nama harus pythonsebaliknya mungkin?
daisy
Selesai, nama pengganti pythondan berhasil ;-P
daisy
Benar, ya, $nameharus cocok juga. Benar-benar merindukan bahwa Anda melewati itu. Akan memperbarui jawabannya.
Patrick