【问题标题】:Supervisord: is there any way to touch-reload a child?监督者:有没有办法让孩子重新加载?
【发布时间】:2012-05-15 13:10:21
【问题描述】:

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

  1. uWSGI ubuntu 的 uWSGI 初始化脚本启动的应用
  2. celerydsupervisord 发起

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

  1. 从 git 拉取代码
  2. 迁移数据库
  3. 告诉uWSGI 重新启动,这样它就会获取新代码。
  4. 告诉celeryd 重新启动,这样它也会接收到新代码。

uWSGI 有这个配置功能:

touch-reload
gracefully reload the uWSGI stack when a file/directory changes.

所以我的脚本由运行所有应用程序进程的非特权用户运行。

要重启uWSGI,我可以简单地touch ~/.restart_uwsgi

有什么方法可以让celerydsupervisord 下运行而不授予非特权用户sudo 访问权限,以便他可以supervisorctl restart celeryd

【问题讨论】:

    标签: supervisord


    【解决方案1】:

    由于我还没有找到更好的方法来做到这一点,这就是我现在正在做的事情:

    # 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,不是最好的解决方案,但它可以工作。

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

    【讨论】:

    • 我认为一个小的事件监听器是一个更好的解决方案:stackoverflow.com/questions/20227965/…
    • 我看到一些 django/python 开发者使用在用户空间中运行的 supervisord 进程,而不是使用基于全局 /etc/ 的设置。这使得更新/刷新变得容易。
    猜你喜欢
    • 2019-08-26
    • 2023-03-10
    • 2020-07-31
    • 2018-07-31
    • 1970-01-01
    • 2016-09-10
    • 2021-08-25
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多