Как обнулить время простоя перезагрузить сервер nginx

Как отправить сигнал HUP и нулевое время простоя перезапустить сервер nginx с помощью файла Node.js

2 ответа

Вам нужно три вещи:

  1. PID вашего сервера nginx. Хранится в: /var/run/nginx.pid

  2. Команда для отправки SIGHUP (1) к процессу с этим PID:

    kill -1 $(cat /var/run/nginx.pid)
    
  3. Способ для node.js отправить kill, Я бы пошел с детским процессом.

Я не разработчик Node. У меня нет способа соединить их во что-то, что имеет смысл, но это то, что вы бы сделали, если бы знали, что делаете.

Да, и ваш сервер nginx и приложение Node.JS должны работать под одним и тем же пользователем, чтобы позволить Node отправлять сигнал. Это довольно легко сделать, но может иметь последствия для безопасности. Вместо этого вы можете захотеть создать SUID-сценарий для вызова Node, но если сделать это небрежно, это также может иметь последствия для безопасности.


В качестве альтернативы, вы можете использовать process модуль для запуска process.kill(...), Вам все равно нужно будет прочитать PID для nginx, а разрешения все равно нужно отсортировать.

Примерно так (опять же, я все еще не разработчик Node, так что это может быть синтаксически некорректно):

var fs = require('fs'),
    process = require('process');

process.kill(fs.readFileSync('/var/run/nginx.pid', "utf8"), 'SIGHUP');
  1. создать файл внутри /etc/sudoers.d/, Назовите это reload-nginx
  2. Поместите следующее со следующими строками внутри reload-nginx. %dev это группа пользователей из нескольких пользователей, которые хотят перезагрузить nginx. Вы также можете ограничить эту привилегию для одного пользователя

%dev ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx.service %dev ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx

Как только это будет сделано, любой, кто принадлежит к %dev группа сможет перезагрузить nginx без ввода пароля. Вы можете немедленно проверить это из командной строки.

Добавьте записи для пользователя, под которым будет запускаться nodejs, а затем используйте nodejs child_process модуль для вызова команд оболочки Unix, таких как sudo systemctl reload nginx, Это должно сделать свое дело.

Другие вопросы по тегам