【发布时间】:2016-11-15 18:56:49
【问题描述】:
不知道你能不能帮忙。
我正在运行以下版本:
OS: SMP Debian 3.2.81-1 x86_64
uWSGI: uWSGI 2.0.11.2
我手动安装了 uWSGI,因为我想使用特定版本。使用以下命令:-
apt-get install build-essential psmisc python-dev libxml2 libxml2-dev python-setuptools
cd /opt/
wget http://projects.unbit.it/downloads/uwsgi-2.0.11.2.tar.gz
tar -zxvf uwsgi-2.0.11.2.tar.gz
mv uwsgi-2.0.11.2/ uwsgi/
cd uwsgi/
python setup.py install
我正在尝试将设置复制到该项目已经在实时环境中运行的另一台服务器上(我实际上是在设置一个测试服务器环境)。
原始服务器在启动时运行 uWSGI。为了弄清楚这是怎么发生的,我用了
htops
我已经能够通过一组命令行开关识别出 uWSGI 正在现有服务器上运行。我已经设法在 init.d 文件夹中找到了使用这些开关初始化 uWSGI 的脚本。
我将此脚本复制到我的测试服务器,并使用
运行它service script.sh start
经过各种故障排除,主要涉及套接字文件夹等的权限,现在当我运行此脚本时,它会启动,如果我运行 htop,我可以看到 uWSGI 正在运行,并且它具有我需要的完全相同的命令开关。
我认为只是将脚本放入 init.d 并授予它执行权限
chmod +x script.sh
在服务器打开时启动它就足够了……但似乎并非如此。因为当我发出
reboot
在终端,终端重新启动,但是当我进入 htops 并检查 uWSGI 进程时它没有运行。
如果在重启后直接发出以下命令
service script.sh start
服务启动得很好,我可以再次在 htops 中看到它。
在线研究让我建议我应该尝试将脚本设置为使用 chkconfig 自动运行。我安装了 chkconfig 使用
apt-get chkconfig
然后运行以下命令
chkconfig --list
我注意到我试图在启动时执行的脚本的所有运行时级别都设置为关闭。
我运行了以下命令
chkconfig /etc/init.d/script.sh on
现在,当我使用 chkconfig 检查脚本运行时开关时,它会显示我的脚本的以下输出:
script.sh 0:off 1:off 2:on 3:on 4:on 5:on 6:off
但是,当我重新启动时,uWSGI 进程仍然没有启动。
如果我只是输入
service script.sh start
在终端,服务运行正常,uWSGI 运行正常。
如何设置脚本在服务器重启时运行?
编辑:
对运行良好的实时服务器的进一步研究确定它似乎没有使用 systemd 在启动时启动 uWSGI。我登录了实时服务器,虽然有一个
/etc/systemd
文件夹,里面只有一个文件夹system,没有文件。系统文件夹中有以下文件:
multi-user.target.wants sockets.target.wants syslog.service
所以这里似乎没有任何与 uWSGI 相关的内容。
还有什么让我觉得这很可能与
/etc/init.d
文件夹,当我运行 htop 并检查正在运行的服务(或守护进程)时,我不太确定 linux 中的正确术语。 uWSGI 在这里显示为使用命令行开关的签名运行,而我在/etc/init.d 中找到的脚本具有这个确切的 uWSGI 命令和相同的开关签名,所以我相当确信这是系统的一部分正在启动 uWSGI 守护程序,我只是不知道我需要做什么,除了将相同的文件复制到新服务器上的 /etc/init.d 并授予它执行权限之外,它还能运行。
直播服务器的操作系统是:
SMP Debian 3.2.73-2+deb7u1 x86_64
我在新服务器上运行的操作系统是
SMP Debian 3.2.81-1 x86_64
所以他们看起来很相似?虽然我不确定版本号中最低有效数字的 8 个增量有多重要。
在新服务器上没有 /etc/systemd 文件夹,而在活动服务器上有一个 /etc/systemd 如上所述。所以它似乎已经单独安装到主操作系统安装(因为我有更高版本的 Debian,默认情况下它没有安装在我的系统上) - 所以也许有一些与 systemd 相关的东西导致脚本在实时服务器上启动,但我不太确定。
【问题讨论】:
标签: linux debian uwsgi systemd init.d