Могу я бежать systemctl restart gunicorn && systemctl restart nginx
без sudo
? В настоящее время я получаю:
out: для перезагрузки "gunicorn.service" требуется аутентификация.
out: Аутентификация как: myuser
out: Пароль:
# coding: utf-8
from fabric.api import *
from fabric.colors import green, red
def production():
env.host_string = '159.xxx.xxx.xx'
env.user = 'myuser'
path = "/home/myuser/myproject/myproject"
print(red("Beginning Deploy:"))
with cd(path):
with prefix('. /home/myuser/myproject/myenv/bin/activate'):
run("pwd")
print(green("Pulling master from git..."))
run("git pull")
print(green("Migrate the database..."))
run("python3 manage.py migrate")
print(green("Restart the uwsgi process"))
run("systemctl restart gunicorn && systemctl restart nginx")
print(red("DONE!"))
Вы можете попробовать добавить правило PolicyKit, чтобы разрешить перезапуск устройств без аутентификации.
Например, это позволит любому пользователю перезапустить названные службы (может потребоваться небольшая настройка):
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units") {
polkit.log("action=" + action)
polkit.log("subject=" + subject)
polkit.log("unit="+action.lookup("unit"))
polkit.log("verb="+action.lookup("verb"))
if (action.lookup("unit") == "gunicorn.service" ||
action.lookup("unit") == "nginx.service") {
var verb = action.lookup("verb");
if (verb == "start" || verb == "restart") {
polkit.log("returning YES")
return polkit.Result.YES;
}
}
}
polkit.log("returning NO")
});
Поместите свои правила в файл в /etc/polkit-1/rules.d
каталог с именем, заканчивающимся на .rules
.
Для этого требуется systemd 226 или выше, что в Ubuntu означает 16.04 LTS или новее.
(И если вы думаете, что это похоже на JavaScript, это потому, что это JavaScript.)
Вы также можете ограничить его конкретными пользователями, установив флажок subject.user
, например:
if (subject.user == "deploy" || subject.user == "me") {