У меня есть сервер, размещенный на EC2. Сервер построен на Linux AMI, на базе CentOS. Он посвящен клиентскому проекту, и я подключаюсь через SSH. Иногда я забываю выключить сервер, когда он не используется, что приводит к ненужным расходам.
Как сделать так, чтобы сервер автоматически отключался при бездействии, например через 30 минут без SSH-соединения?
Естественно, ищу самое простое решение. Проверка каждый час или около того тоже будет в порядке, просто то, что работает надежно.
По состоянию на январь 2013 г. Amazon CloudWatch предоставляет возможность Используйте Amazon CloudWatch для обнаружения и отключения неиспользуемых инстансов Amazon EC2, см. вводную запись в блоге Amazon CloudWatch - Действия по тревоге подробнее об этой функции:
Сегодня мы даем вам возможность стоп или прекратить ваши экземпляры EC2 при срабатывании тревоги CloudWatch. Вы можете использовать это как средство защиты от сбоев (обнаруживать ненормальное состояние, а затем действовать) или как часть логики обработки вашего приложения (дождаться ожидаемого условия и затем действовать). [курсив мой]
Ваш вариант использования указан в разделе Идеи отказоустойчивости в частности:
Если вы (или ваши разработчики) забывчивы, вы можете обнаружить неиспользуемые экземпляры EC2 и закрыть их. Вы можете сделать это, обнаружив очень низкую среднюю нагрузку в течение длительного периода времени. Этот тип отказоустойчивости можно использовать для уменьшения вашего счета за AWS, убедившись, что вы не платите за ресурсы, которые фактически не используете.
Как указано, это зависит от способности эвристически обнаружить соответствующее условие, вызывающее тревогу и останавливающее экземпляр - вы можете перейти на следующий уровень с помощью Публикация специальных показателей в CloudWatch на основе подсчета зарегистрированных пользователей SSH, времени простоя или чего-то еще и получить больший контроль / точность для желаемого процесса обнаружения и завершения работы.
Вы можете создать сценарий задания cron прямо на самом экземпляре, который использует такую команду, как
netstat | grep ssh | grep ESTABLISHED
и если результат не возвращается, напишите это в файл, затем cron попытается снова, и если он снова не вернет результатов, сценарий выполнит это.
/sbin/shutdown -h now
Если все, что вам нужно, это чтобы сервер работал, пока вы вошли в систему, а ваш сеанс простаивал меньше, чем n
единиц времени, вы можете сделать это с помощью упомянутого вами сценария cron, отслеживая вывод w(1)
который сообщает IDLE
время для авторизованного пользователя, которое вы можете использовать.
У меня также есть несколько экземпляров EC2, которые я использую только время от времени. Вот сервис systemd Я сделал этот пример отключения, когда в течение некоторого времени нет активности SSH.