GNU/Linux >> Znalost Linux >  >> Linux

Skript uživatelských dat (cloud-init) se na EC2 nespouští

Cloud-init nepřijímá prosté bash skripty, jen tak. Je to bestie, která žere YAML soubor, který definuje vaši instanci (balíčky, ssh klíče a další věci).

Pomocí MIME můžete také posílat libovolné skripty shellu, ale musíte je zakódovat pomocí MIME.

$ cat my-boothook.txt
#!/bin/sh
echo "Hello World!"
echo "This will run as soon as possible in the boot sequence"

$ cat my-user-script.txt
#!/usr/bin/perl
print "This is a user script (rc.local)\n"

$ cat my-include.txt
# these urls will be read pulled in if they were part of user-data
# comments are allowed.  The format is one url per line
http://www.ubuntu.com/robots.txt
http://www.w3schools.com/html/lastpage.htm

$ cat my-upstart-job.txt
description "a test upstart job"
start on stopped rc RUNLEVEL=[2345]
console output
task
script
echo "====BEGIN======="
echo "HELLO From an Upstart Job"
echo "=====END========"
end script

$ cat my-cloudconfig.txt
#cloud-config
ssh_import_id: [smoser]
apt_sources:
 - source: "ppa:smoser/ppa"

$ ls
my-boothook.txt     my-include.txt      my-user-script.txt
my-cloudconfig.txt  my-upstart-job.txt

$ write-mime-multipart --output=combined-userdata.txt \
   my-boothook.txt:text/cloud-boothook \
   my-include.txt:text/x-include-url \
   my-upstart-job.txt:text/upstart-job \
   my-user-script.txt:text/x-shellscript \
   my-cloudconfig.txt

$ ls -l combined-userdata.txt 
-rw-r--r-- 1 smoser smoser 1782 2010-07-01 16:08 combined-userdata.txt

Combined-userdata.txt je soubor, který tam chcete vložit.

Více informací zde:

https://help.ubuntu.com/community/CloudInit

Všimněte si také, že to velmi závisí na obrázku, který používáte. Ale říkáte, že je to skutečně cloud-init image, takže to platí. Existují další iniciátory cloudu, které se nejmenují cloud-init – pak to může být jiné.


Toto je již několik let staré, ale pro ostatní jsem měl stejný problém a ukázalo se, že cloud-init běžel dvakrát, zevnitř /etc/rc3.d . Odstranění těchto souborů ve složce umožnilo správný chod uživatelských dat:

lrwxrwxrwx  1 root root   22 Jun  5 02:49 S-1cloud-config -> ../init.d/cloud-config
lrwxrwxrwx  1 root root   20 Jun  5 02:49 S-1cloud-init -> ../init.d/cloud-init
lrwxrwxrwx  1 root root   26 Jun  5 02:49 S-1cloud-init-local -> ../init.d/cloud-init-local

Ve skutečnosti cloud-init umožňuje jako vstup jediný skript shell (i když možná budete chtít použít archiv MIME pro složitější nastavení).

Problém se skriptem OP je, že první řádek je nesprávný. Měli byste použít něco takového:

#!/bin/sh

Důvodem je to, že zatímco cloud-init používá #! k rozpoznání uživatelského skriptu potřebuje operační systém úplný řádek Shebang, aby mohl skript spustit.

Takže to, co se děje v případě OP, je, že cloud-init se chová správně (tj. stáhne a pokusí se spustit skript), ale operační systém jej nemůže ve skutečnosti spustit.

Viz:Shebang (Unix) na Wikipedii


Linux
  1. Může být skript spustitelný, ale nečitelný?

  2. Proč není Nullglob výchozí?

  3. Chyba v počítání skriptu pro počet výskytů?

  1. Prostory pro proměnné ve skriptu Bash?

  2. Skript Init.d není spuštěn při spouštění?

  3. 4 způsoby provádění skriptu Shell v systému UNIX / Linux

  1. příkaz realpath nenalezen

  2. shebang nebo ne shebang

  3. SH skript v $PATH není v Linuxu Alpine 3.11 nalezen