主管:有没有办法让 child 重新加载?

标签 supervisord

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

  • uWSGI由 ubuntu 的 uWSGI init 脚本启动的应用程序
  • celeryd开始于 supervisord

  • 所以我正在编写一个部署脚本,它将:
  • 从 git 中拉取代码
  • 迁移数据库
  • 告诉 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/

    相关文章:

    uwsgi - 如何使用管理员启动/停止uWSGI应用程序?

    python - 如何给 celery 中的每个节点命名

    python - 如何在supervisord中设置一个组?

    python - 结构重新启动我的 supervisord 服务终止服务

    docker - 无法使用easy_install或pip在CentOS 6.9中安装主管

    python - 如何通过 xmlrpc 安全地获得对 supervisord 的编程访问?

    python - 为什么在 celery 任务后不关闭日志文件

    redis - 将 redis 与 Bokeh 服务器一起使用。权限被拒绝 : '/bokehpids.json'

    python - Supervisor 无法在共享主机上启动