Я пишу шаблон CloudFormation и пытаюсь отладить сценарий пользовательских данных, который я предоставляю в шаблоне. Как я могу запустить cloud-init
вручную и заставить его выполнять те же действия, что и при запуске нового экземпляра?
Как запустить cloud-init вручную?
Ответы (5)
Вы можете просто запустить его так:
/usr/bin/cloud-init -d init
Это запускает настройку облачной инициализации с начальными модулями. (Параметр -d предназначен для отладки) Если вы хотите запустить все модули, которые вам нужно запустить:
/usr/bin/cloud-init -d modules
Имейте в виду, что во второй раз, когда вы запустите их, это мало что даст, так как уже было запущено во время загрузки. Для принудительного запуска после загрузки вы можете запустить из командной строки:
( cd /var/lib/cloud/ && sudo rm -rf * )
В более старых версиях эквивалент cloud-init init
:
/usr/bin/cloud-init start
Вы также можете найти этот вопрос полезным, хотя он применим к более старым версиям cloud-init: Как сделать так, чтобы сценарии запуска cloud-init запускались каждый раз при загрузке моего экземпляра EC2?
В документации по облачной инициализации, здесь просто приведены примеры. Но он не объясняет параметры командной строки или каждый из модулей, поэтому вам придется поиграть с разными значениями в конфигурации, чтобы получить желаемые результаты. Конечно, вы также можете посмотреть код.
cloud-init: error: invalid choice: 'start' (choose from 'query', 'init', 'modules', 'single')
- person Fluffy; 18.04.2014
cloud-init init
- person Rico; 18.04.2014
cloud-init init
не запускал бы только модули из cloud_init_modules
, пропуская остальную часть запуска?
- person Fluffy; 18.04.2014
cloud-init init
во второй раз, он не запускается, как если бы он сначала загрузил машину (потому что он уже запущен), чтобы заставить его запустить все, что есть обходной путь сделать что-то вроде этого: ( cd /var/lib/cloud/ && sudo rm -rf * )
из командной строки. Если вы хотите запустить другие модули в своей конфигурации, вы также можете запустить cloud-init -d modules
- person Rico; 18.04.2014
/var/lib/cloud/instances/i-xxxxxxx/sem
, затем отредактировать /var/lib/cloud/instances/i-xxxxx/scripts/part-001
по своему вкусу и выполнить его через sudo /usr/bin/cloud-init -d single -n cc_scripts_user
.
- person kadrach; 31.01.2017
Престижность @Rico, а также, если вы хотите запустить один модуль - либо для тестирования, либо потому, что ваш дистрибутив не включает модуль по умолчанию (привет, Precise!), Вы можете
/usr/bin/cloud-init -d single -n <module-name>
Например, когда мой дистрибутив не запускает write_files
по умолчанию (как многие старые дистрибутивы), я использую это в верхней части runcmd:
runcmd:
- /usr/bin/cloud-init -d single -n write-files
[Я знаю, что это не совсем ответ на OP, но когда я пытался решить мою проблему, этот вопрос был одним из лучших результатов, поэтому я полагаю, что другие люди могут найти это полезным]
В большинстве дистрибутивов Linux (включая CentOS и Ubuntu) вы можете перезапустить службу cloud-init с помощью systemctl:
systemctl restart cloud-init
А затем проверьте вывод журнала, чтобы увидеть результаты:
journalctl -f -u cloud-init
В качестве документации вы можете просто запустить
sudo cloud-init clean
и добавьте --logs
, чтобы очистить весь файл журнала. Он все переделает при перезагрузке