我正在设置一个服务器来托管一个 Django 应用程序,它具有:
uWSGI
由 ubuntu 的 uWSGI init 脚本启动的应用程序 celeryd
开始于 supervisord
所以我正在编写一个部署脚本,它将:
uWSGI
重新启动,因此它将获取新代码。 celeryd
重新启动,因此它也会选择新代码。 uWSGI
有这个配置功能:touch-reload
gracefully reload the uWSGI stack when a file/directory changes.
所以我的脚本由非特权用户运行,所有应用程序的进程都在该用户下运行。
重新启动
uWSGI
我可以简单地touch ~/.restart_uwsgi
.有什么办法可以为
celeryd
做同样的事情吗?在 supervisord
下运行不授予非特权用户 sudo 访问权限,以便他可以 supervisorctl restart celeryd
?
最佳答案
由于我还没有找到更好的方法来做到这一点,这就是我现在正在做的事情:
# 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,不是最好的解决方案,但它有效。
如果有人对此有更好的答案,我很乐意更改已接受的答案。
关于主管:有没有办法让 child 重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10601407/