我正在尝试在路由器上运行的基于 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
附带该网络服务器。