Dies ist ein einmal auszuführendes BASH-Skript, um eine Autorun-Umgebung auf Ihrem QNAP NAS zu erstellen. Damit können Sie eigene Skripte automatisch ausführen lassen, wenn das NAS hochfährt.
Ziel dieses Projekts ist es, alle QNAP NAS-Modelle und alle QTS- & QuTS hero-Versionen zu unterstützen. Bitte geben Sie Bescheid, falls Sie beim Ausführen auf Ihrem NAS Fehler feststellen.
Funktionsweise
Dieses Installationsskript schreibt einen autorun.sh-Prozessor in Ihr Standardvolume, unterhalb des .system-Verzeichnisses. Anschließend wird ein Symlink vom DOM zurück zu Ihrem Standard-Datenvolume erstellt, sodass das Skript beim NAS-Start ausgeführt wird. Das bedeutet, Sie müssen die DOM-Partition nicht jedes Mal laden, wenn Sie den Inhalt von autorun.sh ändern möchten.
Das Autorun-Gerät und die Partition werden von diesem Skript automatisch ermittelt.
Falls Sie zuvor keine autorun.sh-Datei hatten, enthält die von diesem Tool erstellte autorun.sh-Datei einen Skriptverzeichnis-Prozessor und stellt ein Skriptverzeichnis für Ihre eigenen Shell-Skripte bereit. Alles in diesem Skriptverzeichnis wird (in Reihenfolge) während des NAS-Starts von der standardmäßig erstellten autorun.sh-Datei ausgeführt. Die untenstehenden Hinweise gelten nur für die von diesem Tool geschriebene autorun.sh. Falls Sie bereits eine andere autorun.sh-Datei hatten, bleibt diese bestehen und wird stattdessen verwendet; die folgenden Hinweise gelten dann nicht.
Der Speicherort des Autorun-Systems hängt vom Namen Ihres Standardvolumes ab. Beispiel: Wenn Ihr Standardvolume CACHEDEV1_DATA heißt, wird der automatische Skriptprozessor erstellt unter:
/share/CACHEDEV1_DATA/.system/autorun/autorun.sh
… und das Skriptverzeichnis wird erstellt unter:
/share/CACHEDEV1_DATA/.system/autorun/scripts/
autorun.sh wird zu einem bestimmten Zeitpunkt während des NAS-Starts ausgelöst und führt dann jede ausführbare Datei im Skriptverzeichnis in der Standard-Dateinamenreihenfolge aus. Wenn Sie ein Skript vor einem anderen ausführen möchten, versehen Sie es mit einer Nummer, z. B.:
Während der Ausführung von autorun.sh wird eine Logdatei erstellt. Sie befindet sich unter /var/log/autorun.log und enthält Datum/Uhrzeit sowie den Namen jedes ausführbaren Skripts, das im Skriptverzeichnis gefunden und ausgeführt wurde, zusammen mit jeglicher von diesen Skripten erzeugten stdout und stderr.
Den Quellcode dieses Projekts finden Sie auf GitHub
Die Installation auf QTS 5.2.5 funktioniert, aber wenn ich versuche, meine Skripte auszuführen, erhalte ich einen „command not found“-Fehler. Es scheint, dass die autorun.sh ausgeführt wird, bevor alle QPKGs gestartet sind, sodass die entsprechenden Befehle nicht gefunden werden. Wenn ich sie später manuell ausführe, funktioniert alles wie erwartet. Ein „sleep“-Befehl am Anfang hat keine Wirkung (außer dem „sleep“).
Korrekt. autorun.sh wird ausgeführt, bevor QPKGs gestartet werden.
sleep hilft nicht, da es den Bootvorgang nur verzögert, bis autorun abgeschlossen ist, was das Starten der QPKGs einschließt.
Ich habe später das RunLast QPKG erstellt, um dieses Problem zu umgehen, aber es funktioniert seit QTS 5.2.0 nicht mehr, da QNAP Änderungen vorgenommen hat, um QPKGs asynchron zu starten.
Derzeit gibt es keine Möglichkeit, nach dem Start Skripte auszuführen, die auf QPKGs angewiesen sind.
Das ist nicht ganz richtig.
Ich habe inzwischen eine Lösung gefunden, indem ich „RunLast“ aus dem „MyQNAP“-Repository verwendet habe. Es hat mich überrascht, dass zunächst derselbe Fehler auftrat. Also habe ich etwas recherchiert. Ich habe herausgefunden, dass die QNAP-Dienste nicht ausschließlich asynchron gestartet werden und vor allem nicht immer auf das erfolgreiche Starten der Abhängigkeiten warten.
Deshalb habe ich mein Startskript so angepasst, dass es dies berücksichtigt.
Das hängt teilweise damit zusammen, wie QNAP seine Binärdateien und Bibliotheken je nach installierten Apps ein- und ausbindet.
Zum Beispiel schlägt „autostart.sh“ meistens fehl, weil die meisten Bibliotheken und Binärdateien noch nicht „verlinkt“ sind. Das gilt teilweise auch für „RunLast“.
Bitte hört aber nicht auf, „RunLast“ weiterzuentwickeln. Es verfolgt bereits den richtigen Ansatz, insbesondere wegen der schönen Struktur der SysV-Startskripte. Damit kann man fast alles zum Laufen bringen, wenn man die Abhängigkeiten der eigenen Anwendung zu anderen QPGG’s berücksichtigt und sich ein wenig aus deren Startskripten abschaut. Ich habe ein einfaches Beispiel für mein ClamD, das ich für mein Xeams verwende:
Beste Grüße,
Mandragor59
***** Es gibt keine Probleme, es gibt nur Herausforderungen *****
„Jeder kann eine maßgeschneiderte Lösung für ein bestimmtes Paket entwickeln, aber das hilft nur einem Teil der Community, der dieses Paket verwendet.“
Hm… vielleicht sollte ich stattdessen über die Semantik der deutschen Sprache diskutieren? Deutsch ist zwar nicht meine Muttersprache, aber wenn ich deinem Beispiel folge, sollte mich das nicht davon abhalten.