start-stop-daemon non funziona come previsto, non è stato scritto alcun file pid


17

Sto cercando di controllare un programma basato su Python (che non si stacca dalla console)

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

La parte iniziale funziona bene. Riesco a vedere lo script attivo e funzionante, ma la parte di arresto no. Dice semplicementeNo xx found running; none killed.

Quindi immagino che ci sia qualcosa di sbagliato nella parte iniziale?

Risposte:


22

start-stop-daemon --start --pidfile "$pid"non scrive nel file pid a meno che non sia specificato --make-pidfile( -m). Senza di --make-pidfileessa spetta al programma avviato per crearlo. Inoltre, per --make-pidfilefunzionare, il processo avviato non può essere demonizzato da solo (tramite un fork), in quanto start-stop-daemonnon saprà quale PID dovrebbe inserire nel file.

L'unica cosa che --pidfile "$pid"fa nel tuo scenario di utilizzo è che si tradurrà in start-stop-daemonnon avviare il programma se è già in esecuzione.


Se il processo continua a non arrestarsi, tutti i criteri passati start-stop-daemon --stopdevono corrispondere. Il significato $piddeve essere un processo in esecuzione, l'UID del processo deve corrispondere $usere il nome del processo (arg0) deve corrispondere $name.
Puoi determinare il valore di arg0 facendops h -p $pid -o comm


Ok, il pidfile è scritto. Ma la parte di arresto non funziona ancora, stesso messaggio di errore
Daisy,

@ warl0ck il file pid è corretto e l'UID del processo corrisponde $user?
Patrick,

Sì, ho visto start-stop-daemon provato a leggere /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326, in modo che il nome dovrebbe essere python, invece, forse?
margherita,

Fatto, ha sostituito il nome pythone ha funzionato ;-P
margherita

Giusto, sì, $namedeve corrispondere anche. Completamente mancato che lo stavi passando. Aggiornerà la risposta.
Patrick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.