使用 nohup 启动服务器并重定向输入、输出

使用 nohup 启动服务器并重定向输入、输出

我有一个启动 python 套接字服务器的 init.d 脚本。因为我希望它作为守护进程运行,所以我使用 nohup 来启动它。我还想将 stdout 和 stderr 重定向到日志文件。我的问题是我还试图捕获进程的 PID 并将其保存到文件中,但我似乎无法做到这一点。

# Start server
echo "Starting server."
nohup ${PROGDIR}/${PROGNAME} -l $IPADDR >>${LOGDIR}/${OUTLOG} 2>>${LOGDIR}/${OUTLOG} </dev/null &
PID=$!

这能够捕获 PID,但重定向不起作用。 (我是重定向 nohup 而不是程序吗?)

接下来我尝试了类似的东西:

nohup /bin/bash -c '...'

但我丢失了PID。此时,我似乎得到了 的 PID nohup /bin/bash -c。由于我对shell脚本不是很熟悉,所以我想在搬起石头砸自己的脚之前先寻求帮助。

所以我的问题是,如何捕获 PID 并将服务器输出重定向到日志文件?我使用的是 debian (raspberry pi),并且正在使用 rc-update.d 编写初始化脚本。

答案1

如果您使用的是 Debian 变体,您可以start-stop-daemon使用它,它可以以更简洁的方式为您完成所有这一切。尤其:

start-stop-daemon --make-pidfile --pidfile "$PIDFILE" --background \
    --no-close --exec "${PROGDIR}/${PROGNAME}" --start -- -l "$IPADDR" \
    >> "${LOGDIR}/${OUTLOG}" 2>> "${LOGDIR}/${OUTLOG}" </dev/null

应该非常接近你想要的。它将 PID 放入文件中而不是变量中,但您当然可以轻松地将其读回变量中。

相关内容