Я впечатлен, что работает.(Для всех, кто удивился, что экземпляр может остановиться сам, см. Примечания 1 и 2.)
Вы также можете попробовать "sudo halt", так как вам не нужно запускаться от имени пользователя root, еслиучетная запись пользователя под управлением R может запускать sudo.Это довольно часто встречается во многих AMI на EC2.
Будьте осторожны с тем, что представляет собой предположение о выходе из R - хотите верьте, хотите нет, может произойти сбой R. Возможно, лучше иметь отдельный скрипт, который просматриваетR pid и, когда этот PID больше не активен, завершает экземпляр.Выполнение этой команды внутри R означает, что в случае сбоя R он никогда не достигнет вызова остановки.Если вы вызываете его из другого скрипта, это тоже может быть опасно.Если вы хорошо знаете Linux, вам нужен PID от запуска R, который вы можете передать другому сценарию, который проверяет ps
, скажем, каждую 1 секунду, а затем завершает экземпляр, когда PID больше не работает.
Я думаю, что лучшим решением будет использование инструментов API EC2 (см. Документацию: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/) для прекращения ИЛИ остановки экземпляров.Между этими двумя понятиями есть разница, и имеет значение, поддерживается ли ваш экземпляр EBS или S3.Вам не нужно запускаться от имени root, чтобы завершить работу экземпляра - тот факт, что у вас есть закрытый ключ и сертификат, показывает Amazon, что вы БОСС, намного выше тех, кто просто имеет root-доступ на вашем экземпляре.
Поскольку эти учетные данные могут быть использованы для получения информации, будьте осторожны при запуске инструментов API с данного сервера, вам потребуется ваш сертификат и закрытый ключ на сервере.Это плохая идея, если у вас есть проблемы с безопасностью.Было бы лучше отправить сообщение на главный сервер и закрыть его.Если вы настроили обмен сообщениями между экземплярами, это может сделать всю работу за вас.
Примечание 1: Эрик Хаммонд сообщает , что halt
только приостановитEBS, так что у вас все еще есть плата за хранение.Если вам случится запустить много таких примеров, это может привести к беспорядку.Ваш первоначальный вопрос кажется неясным, хотите ли вы прекратить или остановить инстанцию.У него есть другие полезные советы на этой странице
Примечание 2. Короткая ветка на форуме разработчиков EC2 дает советы для пользователей Linux и Windows.
Примечание 3: Экземпляры EBS оплачиваются за неполные часы, даже при перезапуске.(См. эту ветку на форуме разработчиков .) Автоматическое приостановление, близкое к часовой отметке, может быть полезным, если предположить, что процесс R не работает, в случае, если можно повторно выполнить этот экземпляр (т.е.сэкономить на перезапуске).Другие полезные инструменты для рассмотрения: setTimeLimit
и setSessionTimeLimit
, а также различные инструменты для контрольных точек (у меня есть Q, в котором упоминает пару ).Использование авто-уничтожения полезно, если у вас есть потенциально плохой код.
Примечание 4: Я недавно узнал о команде shutdown
в пакете fun
.Это мультиплатформенная.См. этот пост для комментариев, код здесь .Опасный материал, но он может быть полезен, если вы хотите адаптироваться к Windows.Я не пробовал, однако.
Обновление 1. Еще три идеи:
- Вы можете использовать
.Last()
и runLast = TRUE
для q()
и quit()
, который может закрыть экземпляр. - При использовании littler или скрипта, который вызывает скрипт через Rscript, могут использоваться те же функции командной строки.
- Мой любимый на сегодняшний день пакет,
tcltk2
имеет механизм аккуратного таймера, называемыйtclTaskSchedule()
, который можно использовать для планирования выполнения выражения.После этого вы можете сойти с ума от исполнения материала незадолго до истечения часового интервала.