GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Benutzerdatenskripte werden nicht auf meinem benutzerdefinierten AMI ausgeführt, sondern funktionieren unter Standard-Amazon-Linux

User_data wird nur beim ersten Start ausgeführt. Da Ihr Image ein benutzerdefiniertes ist, nehme ich an, dass es bereits einmal gestartet wurde und daher user_data deaktiviert ist.

Für Windows kann dies durch Aktivieren eines Kontrollkästchens in den Eigenschaften von Ec2-Diensten erfolgen. Ich schaue gerade, wie ich das am Ende der benutzerdefinierten Image-Erstellung automatisiert machen kann.

Für Linux nehme ich an, dass der Mechanismus derselbe ist, und user_data muss auf Ihrem benutzerdefinierten Image erneut aktiviert werden.

Der #cloud-boothook machen, dass es funktioniert, weil es das Skript von einem user_data ändert zu einem Cloud-Boothook-Mechanismus, der bei jedem Start ausgeführt wird.

BEARBEITEN :

Hier ist der Code, um den Start unter Windows mit Powershell zu reaktivieren:

$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

(Ich kenne die Frage Focus Linux, aber es könnte anderen helfen ...)


Wie ich getestet habe, gab es einige Bootstrap-Daten in /var/lib/cloud Verzeichnis. Nachdem ich dieses Verzeichnis geleert habe, Benutzerdaten Skript funktionierte normal.

rm -rf /var/lib/cloud/*

Ich hatte auch das gleiche Problem auf Ubuntu 16.04 hvm AMI. Ich habe das Problem beim AWS-Support gemeldet, konnte aber immer noch keinen genauen Grund/Fehler finden, der es betrifft.

Aber ich habe trotzdem etwas, was dir helfen könnte.

Bevor Sie AMI nehmen, entfernen Sie das /var/lib/cloud-Verzeichnis (jedes Mal). Stellen Sie es dann beim Erstellen des Images auf no-reboot ein.

Wenn diese Dinge immer noch nicht funktionieren, können Sie sie weiter testen, indem Sie die manuelle Ausführung von Benutzerdaten erzwingen. Auch tailf /var/log/cloud-init-output.log für den Cloud-Init-Status. Es sollte mit etwas wie modules:final enden, damit Ihre Benutzerdaten ausgeführt werden. Es sollte nicht bei modules:config.

hängen bleiben

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

Ich habe keine Ahnung, ob die obigen Befehle unter CentOS funktionieren oder nicht. Ich habe es auf Ubuntu getestet.

In meinem Fall habe ich auch versucht, das Verzeichnis /var/lib/cloud zu entfernen, aber in unserem Szenario konnten Benutzerdaten immer noch nicht ausgeführt werden. Aber ich habe mir eine andere Lösung dafür ausgedacht. Was wir getan haben, ist, dass wir ein Skript mit den obigen Befehlen erstellt und dieses Skript so ausgeführt haben, dass es während des Systemstarts ausgeführt wird.

Ich habe die folgende Zeile in /etc/rc.local hinzugefügt, um dies zu ermöglichen.

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

Aber hier ist der Haken, es wird das Skript bei jedem Start ausführen, sodass Ihre Benutzerdaten bei jedem einzelnen Start ausgeführt werden, genau wie #cloud-boothook. Keine Sorge, Sie können es einfach optimieren, indem Sie am Ende einfach die force-user-data.sh selbst entfernen. Ihre force-user-data.sh sieht also in etwa so aus

#!/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

Ich würde mich freuen, wenn jemand etwas Licht ins Dunkel bringen kann, warum die Benutzerdaten nicht ausgeführt werden können.


Linux
  1. Linux – Kopfhörer funktioniert nicht Linux Mint 18?

  2. PYTHONPATH funktioniert nicht für sudo unter GNU/Linux (funktioniert für root)

  3. Tomcat läuft, aber Port 8080 antwortet nicht

  4. Composer installieren/aktualisieren funktioniert nicht

  5. Der Linux-Befehl „ll“ funktioniert nicht

Fix Touchpad Click funktioniert nicht in Linux Mint

Amazon Linux AMI gegen Ubuntu

Linux-Datumsbefehl funktioniert nicht

sudo -i aber aktuelles Arbeitsverzeichnis beibehalten

Auf welcher Linux-Distribution basiert das Amazon Linux AMI?

sudo funktioniert bei bestimmten Befehlen nicht