5

我正在设置一个服务器来托管一个 Django 应用程序,该应用程序具有:

  1. uWSGI由 ubuntu 的 uWSGI 初始化脚本启动的应用程序
  2. celeryd开始于supervisord

所以我正在编写一个部署脚本,它将:

  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 访问权限的情况celeryd下运行相同的操作,这样他就可以了?supervisordsupervisorctl restart celeryd

4

1 回答 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,不是最好的解决方案,但它有效。

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

于 2012-05-16T16:25:42.277 回答