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