start-stop-daemon ไม่ทำงานตามที่คาดไว้ไม่มีการเขียนไฟล์ pid


17

ฉันพยายามควบคุมโปรแกรมที่ใช้ python (ซึ่งไม่แยกตัวเองออกจากคอนโซล)

#!/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 แต่ส่วนที่หยุดยังคงไม่ทำงานข้อความแสดงข้อผิดพลาดเดียวกัน
daisy

@ warl0ck ไฟล์ pid นั้นถูกต้องและ UID ของกระบวนการตรงกัน$userหรือไม่
แพทริค

ใช่ฉันเห็น start-stop-daemon พยายามอ่าน/proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326ดังนั้นชื่อควรจะเป็นpythonเช่นนั้นหรือ
เดซี่

เสร็จสิ้นใช้ชื่อแทนที่pythonและใช้งานได้ ;-P
daisy

ใช่ใช่$nameต้องจับคู่ด้วย พลาดโดยสิ้นเชิงว่าคุณผ่านสิ่งนั้นแล้วจะอัปเดตคำตอบ
แพทริค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.