收到github的webhook请求后,我正在使用shell脚本重新启动我的flask应用程序,但我遇到了一个没有密码sudo身份验证的问题,但只有当uWSGI
运行重新启动功能时。
我将应用程序部署为systemd
服务,为了重新启动服务,我必须将systemctl restart myapp.service
作为sudo
运行。因此,我将这一行插入到一个脚本中,并将其标记为可以像sudo一样运行,而无需运行Web应用程序的用户在/etc/sudoers
中进行密码验证。
重启功能非常简单:
import os
def on_push():
os.setuid(os.geteuid())
os.system('sudo /path/to/script.sh')
脚本本身就是一行代码:
systemctl restart myapp.service
在正常的python shell中通过os.system('sudo /path/to/script.sh')
运行该命令可以按预期重新启动应用程序,而无需询问密码。但是,当命令由uWSGI
工作进程运行时,它无法重新启动,并显示消息Interactive authentication required
。
这是一个可以通过更改uWSGI启动参数来解决的问题吗?
原来我需要在用于启动uWSGI实例的.ini
文件中将uid
和gid
设置为用于运行应用程序的用户/组。