GNU/Linux >> Znalost Linux >  >> Linux

Skripty uživatelských dat neběží na mém vlastním AMI, ale fungují ve standardním Amazon linuxu

User_data se spouští pouze při prvním spuštění. Protože je váš obrázek vlastní, předpokládám, že již byl jednou spuštěn, a proto jsou uživatelská data deaktivována.

U Windows to lze provést zaškrtnutím políčka ve vlastnostech služeb Ec2. V tuto chvíli se dívám, jak to udělat automatizovaným způsobem na konci vytváření vlastního obrázku.

Předpokládám, že pro linux je mechanismus stejný a uživatelská data je třeba znovu aktivovat na vašem vlastním obrazu.

#cloud-boothook aby to fungovalo, protože to změní skript z user_data na cloud-boothook, který běží při každém spuštění.

UPRAVIT:

Zde je kód pro opětovnou aktivaci startu v systému Windows pomocí powershell:

$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\Config.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2HandleUserData"} |%{ $_.State = "Enabled" }
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2SetComputerName"} |%{ $_.State = "Enabled" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile

$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\BundleConfig.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Property") |?{ $_.Name -eq "AutoSysprep"} |%{ $_.Value = "Yes" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile

(Znám otázku zaměřenou na linux, ale mohla by pomoci ostatním ...)


Jak jsem testoval, v /var/lib/cloud byla nějaká bootstrap data adresář.Po vymazání tohoto adresáře Uživatelská data skript fungoval normálně.

rm -rf /var/lib/cloud/*

Také jsem čelil stejnému problému na Ubuntu 16.04 hvm AMI. Na problém jsem upozornil podporu AWS, ale stále jsem nemohl najít přesný důvod/chybu, která to ovlivňuje.

Ale přesto mám něco, co by vám mohlo pomoci.

Před převzetím AMI odstraňte adresář /var/lib/cloud (pokaždé). Poté při vytváření obrázku nastavte jej na no-reboot.

Pokud tyto věci stále nefungují, můžete to dále otestovat tím, že vynutíte ruční spuštění uživatelských dat. Také tailf /var/log/cloud-init-output.log pro stav cloud-init. Mělo by to končit něčím jako modules:final, aby vaše uživatelská data běžela. Neměl by se zaseknout na modules:config.

sudo rm -rf /var/lib/cloud/* sudo cloud-init init sudo cloud-init modules -m final

Nemám moc ponětí, zda výše uvedené příkazy budou fungovat na CentOS nebo ne. Testoval jsem to na Ubuntu.

V mém případě jsem se také pokusil odstranit adresář /var/lib/cloud, ale přesto se v našem scénáři nepodařilo spustit uživatelská data. Ale přišel jsem na jiné řešení. To, co jsme udělali, je, že jsme vytvořili skript s výše uvedenými příkazy a nechali jej běžet při spouštění systému.

Aby se to stalo, přidal jsem pod řádek v /etc/rc.local.

sudo bash /home/ubuntu/force-user-data.sh || exit 1

Ale tady je háček, spustí skript při každém spuštění, takže vaše uživatelská data budou běžet při každém spuštění, stejně jako #cloud-boothook. Žádný strach, můžete to vyladit pouhým odstraněním samotného force-user-data.sh na konci. Takže vaše force-user-data.sh bude vypadat nějak takto

#!/bin/bash sudo rm -rf /var/lib/cloud/* sudo cloud-init init sudo cloud-init modules -m final sudo rm -f /home/ubuntu/force-user-data.sh exit 0

Ocenil bych, kdyby někdo mohl osvětlit, proč není možné spustit uživatelská data.


Linux
  1. Linux – sluchátka nefungují Linux Mint 18?

  2. PYTHONPATH nefunguje pro sudo na GNU/Linux (funguje pro root)

  3. Tomcat běží, ale port 8080 neodpovídá

  1. linux limited.conf nefunguje?

  2. Linuxový příkaz 'll' nefunguje

  3. Jak nainstalovat Postgresql 11 v Amazon Linux AMI?

  1. Linux – LED dioda Caps Lock na konzoli Linux nefunguje?

  2. Linux - příkaz mount vrací nulu/0, ale nefunguje

  3. sudo nefunguje na určitých příkazech