Lassen Sie das Skript beim ersten Start des neuen CentOS 7 VM-Klons laufen

3680
Justin

Ich setze einige Server ein, die sich im Grunde selbst verwalten müssen, nachdem ich das Unternehmen verlassen habe, da ich nur der Vertrags-IT-Typ bin. Wer dies schafft, sollte grundsätzlich in der Lage sein, ein VM-Image in ESXi zu klonen, und wenn es gestartet wird, muss es sich selbst konfigurieren.

Ich weiß, du sagst wahrscheinlich "Use Puppet or Chef" oder "Use Docker", na ja, das habe ich auch gedacht, aber das ist anscheinend zu kompliziert für dieses Setup, sie haben den Ansatz "Weniger ist mehr".

Diese Server müssen über eine statische IP-Adresse verfügen. Wenn ich das erste Mal das erste Mal startet, könnte ich eine /etc/sysconfig/network-scripts/ifcfg-enp0s3IP-Adresse über DHCP abrufen und die Datei dann erneut konfigurieren, wobei die aktuelle IP-Adresse als DHCP verwendet wird. und vielleicht sogar super fancy, wie test, wenn es funktioniert, wenn nicht, die ifcfg-en0s3Datei zurücksetzen, im Netzwerk abrufen und dann jemandem eine E-Mail schicken, dass der Server etwas manuelle Aufmerksamkeit benötigt, was auch immer funktioniert.

Das Obige könnte mehr Informationen enthalten, als Sie benötigen, da ich nur wissen muss, wie ein Skript beim ersten Start ausgeführt wird. Wenn Sie es zu einem Runlevel hinzufügen, wird es jedes Mal ausgeführt, wenn es auf diesem Runlevel gestartet wird.

Ich dachte, ich könnte es in Runlevel 3 haben. Sobald es sich selbst konfiguriert hat, entfernen Sie einfach den Symlink im rc3.dOrdner zum Skript ... Aber das ist irgendwie meine Sicherungsoption, wenn ich keinen Weg finden kann, es einfach auszuführen auf dem "nächsten Start".

Ich habe auch darüber nachgedacht, einfach @rebootmit einem Cron-Job zu arbeiten, aber auch das müssen sich von der Crontab entfernen.

Wenn mir jemand hilft, eine andere Lösung für die statische IP-Konfigurationssache zu finden, ist das in Ordnung, aber ich muss immer noch wissen, wie ein Skript beim nächsten Start (bei angegebenen Runlevels) gestartet werden kann, da es auch für andere Aufgaben benötigt wird .

Vielen Dank!

PS: Ich merke, dass es nicht unbedingt eine große Sache ist, wenn man das Skript dazu bringt, sich selbst aus den crontab- oder rc.d-Verzeichnissen zu entfernen. Ich dachte einfach, es wäre nur eine Takelage, und dachte, es könnte einen alternativen Weg geben, etwas Das soll einmal ausgeführt werden, beim nächsten Neustart. Wenn nicht, würde einer der beiden vorherigen Ansätze ausreichen

PSS Ich habe hier ein ähnliches Thema gefunden, in dem ein Skript ausgeführt wird @reboot, und es wird geprüft, ob Dateien / Skripts innerhalb eines angegebenen Verzeichnisses ausgeführt werden müssen. Anschließend werden sie verschoben, um sie zu deaktivieren. Ich nehme an, das würde funktionieren, ich könnte etwas wie Symlink mit dem Verzeichnis machen, anstatt die Dateien selbst zu verschieben, aber wenn das die beste Lösung ist, dann reicht es aus. (was auch immer die Arbeit erledigt :-))

0

2 Antworten auf die Frage

1
stuartah

fairly simply - add it as a startup script - last line of script after checking all ok etc:

rm $0

Ist dies normalerweise so? Ich habe mir nur gedacht, dass es so etwas wie crontab oder init.d geben würde, es würde nur für den nächsten Startvorgang ausgeführt werden. Wenn nicht, dann entfernen Sie einfach die Ausführung, nicht das Skript selbst. (Es muss festgelegt werden, dass es erneut ausgeführt wird ...) Justin vor 8 Jahren 1
0
eric.green

Ich habe in den letzten fünfzehn Jahren das "firstboot" -Skript für mehrere physische und virtuelle Speichergeräte geschrieben und habe bei erfolgreichem Abschluss des ersten Startvorgangs immer den "rm" des Symlinks verwendet, um sicherzustellen, dass er beim nächsten Start nicht ausgeführt wird .

Die andere Möglichkeit besteht darin, eine Sentinel-Datei wie '/ FIRSTBOOT' zu setzen, wenn der erste Startvorgang abgeschlossen ist, und dann eine Zeile hinzuzufügen ', wenn [-f / FIRSTBOOT]; dann ; Ausfahrt 0; fi 'an der Spitze des Skripts. Dies würde die Option geben, die Sentinel-Datei zu entfernen und einen Neustart durchzuführen, wenn Sie die virtuelle Maschine erneut konfigurieren müssen. Dies ist für die meisten Benutzer einfacher als das Verknüpfen einer verdeckten Datei mit einem verdeckten Verzeichnis irgendwo im System.

Sie sind auf Centos 7, also haben Sie systemd anstelle von SysV init. Die Sentinel-Datei könnte also für Sie einfacher sein.