Supervisord:有没有办法重新加载子进程?

5
我正在设置一个服务器来托管一个Django应用程序,其中包括:
  1. 由Ubuntu的uWSGI init脚本启动的uWSGI应用程序
  2. supervisord启动的celeryd
因此,我正在编写一个部署脚本,它将:
  1. 从Git获取代码
  2. 迁移数据库
  3. 告诉uWSGI重新启动,以便它可以使用新代码。
  4. 告诉celeryd重新启动,以便它也可以使用新代码。
uWSGI有这个配置特性:
touch-reload
gracefully reload the uWSGI stack when a file/directory changes.

我的脚本是由非特权用户运行的,所有应用程序进程都在此用户下运行。

要重新启动 uWSGI,我只需执行 touch ~/.restart_uwsgi

是否有办法在不授予非特权用户sudo权限的情况下,以同样的方式为在supervisord下运行的celeryd执行supervisorctl restart celeryd?

1个回答

0

由于我仍然没有找到更好的方法来做这件事,所以现在我正在做以下操作:

# restart_my_proc.sh:
#!/bin/sh
supervisorctl restart <my_proccess_name>

chmod +x restart_my_proc.sh

# sudoers:
<site_user> ALL= NOPASSWD:/path/to/restart_my_proc.sh

# my_deploy_script.sh
sudo /path/to/restart_my_proc.sh

所以我正在使用sudo,这不是最好的解决方案,但它可以工作。

如果有人对此有更好的答案,我很乐意更改接受的答案。


我认为一个小的事件监听器是更好的解决方案:https://dev59.com/omIj5IYBdhLWcg3weE-q#20298885 - soulseekah
我见过一些django/python开发人员使用在用户空间中运行的supervisord进程,而不是使用全局的/etc/配置设置。这样做可以使更新/刷新变得更加容易。 - patroqueeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接