启动-停止-守护进程未按预期工作,未写入 pid 文件

启动-停止-守护进程未按预期工作,未写入 pid 文件

我正在尝试控制一个基于 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.

所以我猜开头部分有问题?

答案1

start-stop-daemon --start --pidfile "$pid"除非指定--make-pidfile( ) ,否则不会写入 pid 文件。-m如果没有--make-pidfile它,则由启动的程序来创建它。另外,为了--make-pidfile正常工作,正在启动的进程无法自行守护进程(通过 fork),因为这样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

相关内容