Upstart 无法确定我的进程的 pid

Upstart 无法确定我的进程的 pid

我正在为同事编写的一项小型服务编写 upstart 脚本。我的 upstart 作业可以启动该服务,但启动时只输出queryqueue start/running;请注意,没有为其他服务提供的 pid。

#/etc/init/queryqueue.conf

description     "Query Queue Daemon"
author          "---"

start on started mysql
stop on stopping mysql

expect fork

env DEFAULTFILE=/etc/default/queryqueue
umask 007

kill timeout 30

pre-start script
    #if [ -f "$DEFAULTFILE" ]; then
    #    . "$DEFAULTFILE"
    #fi
    [ ! -f /var/run/queryqueue.sock ] || rm -rf /var/run/queryqueue.sock
    #exec /usr/local/sbin/queryqueue -s /var/run/queryqueue.sock -d -l /tmp/upstart.log -p $PIDFILE -n $NUM_WORKERS $CLEANCACHE $FLUSHCACHE $CACHECONN
end script

script
    #Originally this stanza didn't exist at all
    if [ -f "$DEFAULTFILE" ]; then
        . "$DEFAULTFILE"
    fi
    exec /usr/local/sbin/queryqueue -s /var/run/queryqueue.sock -d -l /tmp/upstart.log -p $PIDFILE -n $NUM_WORKERS $CLEANCACHE $FLUSHCACHE $CACHECONN
end script


post-start script
    for i in `seq 1 5` ; do
        [ -S /var/run/queryqueue.sock ] && exit 0
        sleep 1
    done
    exit 1
end script

有问题的服务是一个 python 脚本,它在运行时如果没有错误,会在检查命令行选项和基本环境健全性后立即使用下面的代码分叉,所以我告诉 upstart expect fork

pid = os.fork()
if pid != 0:
    sys.exit(0)

该脚本是可执行的,并且有一个 python shebang。我可以手动向进程发送 TERM 信号,它会正常退出。但运行stop queryqueue声明queryqueue stop/waiting该进程仍然运行良好。此外,它的日志表明它从未收到过 kill 信号。我猜这是因为 upstart 不知道它有哪个 pid。我也尝试过expect daemon完全省略 expect 子句,但行为没有任何变化。

我怎样才能让 upstart 确定执行进程的 pid

答案1

expect节仅适用于“主”进程(“ exec”或“ script”节)。这在 init(5) 中有记录。

相关内容