通过 init.d 脚本在启动时运行 Python 应用程序

通过 init.d 脚本在启动时运行 Python 应用程序

我正在尝试在路由器上运行的基于 Debian 的操作系统上启动 Python 应用程序。该应用程序预先捆绑了站点包和 python 二进制文件。就像虚拟环境一样。该应用程序相当大(一个网络服务器),所以我认为没有必要将其发布在这里。

我创建了一个 init.d 脚本来在启动时启动该应用程序。我已经在其他设备上使用相同的脚本来实现完全相同的应用程序,并且在这些设备上它正在运行。不幸的是,在路由器上它没有,我花了一整天的时间找出原因 - 但现在我放弃并在这里问一个问题。

我已将初始化脚本最小化到最低限度,如下所示

#!/bin/bash

### BEGIN INIT INFO
# Provides:             Webserver
# Required-Start:       $local_fs $remote_fs $syslog
# Required-Stop:        $local_fs $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:
# Short-Description:    ...
# Description:          ...
### END INIT INFO

/path/to/python /path/to/main.py /path/to/configfile &

exit 0

最初的剧本比这要广泛得多。但它认为这应该可以(?)。

rc*.d通过以下方式在正确的目录中创建了符号链接

update-rc.d webserver defaults

我证实它们确实是被创建的,而且确实如此。

重新启动后什么也没有发生。该应用程序将不会启动。如果我在终端中运行脚本,它就会按预期启动。

我尝试将命令的输出重定向到日志文件。该文件将被创建,但为空。所以我不知道启动时是否会发生一些错误。

为了测试,我用一个简单的无限 shell(和 python)脚本替换了启动应用程序的命令,该脚本每秒打印一些内容。我重新启动机器后,这两个脚本都在运行。

我已经查看了所有日志文件(数量不多),/var/log但找不到任何参考点来说明应用程序无法启动的原因。由于我将输出重定向到的日志文件是空的,我不知道可能会失败。但是日志文件肯定是在我删除它之后创建的。所以命令实际上是运行的。

我还可以尝试什么来查找错误?

编辑:

在继续寻找答案之后,我找到了一个可能的解决方案,我立即在路由器上尝试过。有人说,如果应用程序附带 python 二进制文件,它可能是一个虚拟环境,在启动应用程序之前,我应该运行activate可以在该环境中找到的脚本。不幸的是,没有activate附带该网络服务器。

相关内容