У меня AWS экземпляров EC2, на которых запущен Debian, а systemd работает с Node в качестве службы. (Здесь и далее эти экземпляры называются «серверы узлов».)
Серверы узлов запускаются другим экземпляром (далее именуемым «экземпляр менеджера»), который постоянно включен.
Когда узел сервер испытывает некоторый предопределенный период бездействия, я хочу, чтобы он автоматически отключился.
Я рассматриваю следующие варианты:
- (После определения периода бездействия в узле) выполните команду
child_process
в узле, который выполняет команду shutdown now
. - (После определения периода бездействия в узле) вызовите AWS SDK stopInstances с собственным идентификатором ресурса экземпляра.
- Предоставьте конечную точку HTTP GET с именем
last-request-time
на каждом сервере Node, который периодически опрашивается «экземпляром менеджера», который затем решает, следует ли / когда вызывать AWS SDK stopInstances .
Я не уверен, какой из этих подходов выбрать, и буду признателен за любые советы. Явное отключение компьютера от узла, работающего на той же машине, выглядит как-то неуместным. Но для варианта 3 требуется периодический HTTP-опрос c, не говоря уже о том, что более рискованно полагаться на другой экземпляр для автоматического выключения. (Если менеджер не работает, все экземпляры продолжают работать.)
Или, возможно, можно заставить systemd завершить работу машины, когда определенная служба завершает работу с определенным кодом? Это, если возможно, показалось бы наилучшим решением, поскольку процесс Node должен был бы прервать себя только после периода бездействия с определенным кодом выхода.