Ich habe kürzlich die Erfahrung gemacht, ein Shell-Skript zu schreiben, das einen Server zum Absturz brachte (und eine Partition beschädigte), indem alle Ressourcen verbraucht wurden. Es war an einen Cron-Job angeschlossen, und es scheint, dass es länger gedauert hat als das Intervall zwischen den Hinrichtungen, und im Laufe der Zeit ist der Schneeball außer Kontrolle geraten.
Jetzt habe ich es so geändert, dass es seinen Betriebszustand aufzeichnet und nicht mehr als einmal gleichzeitig ausgeführt wird. Meine Frage ist: Gibt es andere, einfache Möglichkeiten, ein Skript vor Schaden zu schützen? Gibt es eine Standardliste von Dingen, die ein Skript tun sollte, um sich richtig zu verhalten, nicht zu viele Ressourcen zu verbrauchen, ordnungsgemäß zu versagen, die richtigen Personen zu alarmieren usw.?
Grundsätzlich: Welche anderen Fallstricke sollte ich vermeiden?
Die Sicherheitsmaßnahmen, über die Sie sprechen, hängen davon ab, was Ihr Skript tut. Zum Beispiel ist es besser, einige wichtige Dateien zu sichern, bevor Sie sie automatisch ändern. Wenn das Skript auf irgendeine Weise fehlschlägt und diese wichtige Datei beschädigt, sind Sie sicher, da Sie über ein Backup usw. verfügen.
Eine wichtige Sache zu erwähnen ist das Protokollieren, Protokollieren und Protokollieren . Wenn Ihr Skript im Hintergrund ausgeführt wird, ohne dass eine Protokolldatei den Fortschritt und die Vorgänge anzeigt, haben Sie in naher oder ferner Zukunft keine Ahnung von potenziellen Problemen. Vergessen Sie nicht, den Zeitstempel jedes Protokolleintrags anzugeben und dem NTP-Dienst zu ermöglichen, genau zu wissen, zu welchem Zeitpunkt dies geschehen ist.
quelle
Am Ende führen wir das Skript jetzt in einer VM aus. Dies schränkt den Umfang des Schadens, der verursacht werden kann, erheblich ein.
Das Erschreckende an Linux (zumindest für mich) ist, dass kleinere Tippfehler oder Fehler verheerende Auswirkungen haben können. Sogar so etwas wie das Ausführen eines Befehls mit einem $ {VARIABLE} kann eine völlig andere (und destruktive) Bedeutung haben, wenn diese Variable leer ist oder ein Leerzeichen enthält.
quelle