Як змусити сценарій даних EC2 користувача знову запускатися при запуску?


19

Після того, як cloud-init запускає сценарій даних користувача під час першого завантаження екземпляра EC2, файл стану, імовірно, записується так, що cloud-init не буде запускати сценарій знову при наступних перезавантаженнях. Є випадки, коли я хотів би видалити цей файл стану, щоб сценарій даних користувача запустився знову. Де це?

Відповіді:


24

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Підтверджено роботу над:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Для повноти, якщо у вас є ситуація, коли ви хочете відслідковувати факт / можливість того, що цей AMI [мав батьківський AMI, який ...], і всі вони керували cloud-initданими користувачів, ви можете видалити лише поточний семафор.

rm /var/lib/cloud/instance/sem/config_scripts_user


2
Ви швидко зрозуміли це.
c24w

9
@ c24w Ці часові позначки вводять в оману. Насправді мені знадобилося кілька годин досліджень і тестувань, тож коли я це зрозумів, я створив це питання, щоб допомогти наступній людині, яка шукає остаточну відповідь.
Майк

1
Я натрапив на це з тих пір і не зрозумів, що йому пропонується розміщувати вікі типу Q & As. Вдячний, що ви це документували!
c24w

1
Я радий, що це було заохочено на сервері за замовчуванням. Я бачив, як це багато разів звертав увагу на SO
відвертий

1
@ flag5 Щодо curlсервісу метаданих, щоб отримати поточний ідентифікатор екземпляра, непотрібно, оскільки /var/lib/cloud/instanceце вже посилання на поточний екземпляр у /var/lib/cloud/instances. :-)
Майк

2

Ви можете розмістити свій скрипт у /etc/rc.local, який запустить сценарій при кожному перезавантаженні.


/etc/rc.localне має нічого спільного з даними користувачів EC2.
Майк

@MikeConigliaro Я хотів використовувати дані користувача, щоб зробити щось запущеним під час кожного завантаження, тому я змусив сценарій даних користувача додати його до /etc/rc.local.
користувач253751

0

Ви також можете налаштувати свої дані користувача для повторного запуску при кожному завантаженні, замість того, щоб видаляти файл стану. cloud_final_modulesДля повторного запуску сценарію userdata ви повинні використовувати у своєму скрипті userdata, і для цього вам потрібно налаштувати uderdata, щоб мати кілька файлів у userdata. Приклад файлу даних користувача такий:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

Це зробить скрипт з даними користувача для виконання на останньому кроці кожного процесу завантаження. Тут bin/echo "Hello World" >> /tmp/userdata-test.txtпотрібно виконати лише один рядок , замініть це на ваш скрипт оболонки, який потрібно виконувати кожен раз при завантаженні машини.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.