Thema autorun.sh: Besser über eigenes rcS/rcD

  • Mir sind in diesem Forum die Diskussionen über die Verwendung des autorun.sh aufgefallen.
    Diese Technik hat für mich den gravierenden Nachteil, dass die so gestarteten Prozesse beim herunterfahren der NAS nicht ordentlich beendet werden.


    Vorbemerkung:

    Zitat

    Was mir dabei nicht mehr transparent ist, da bei mir Installiert, ist die Frage ob dafür das QPKG Optware istalliert sein muss ... Ich denke ja ...


    Was ist für eigenes Startup/Shutdown zu realisieren?
    Nicht sehr viel!
    Mit den im Folgenden beschriebenen Schritten und etwas Linux KnowHow ist eine Übertragung auf die eigene QNAP möglich.
    Getestet ist es auf meiner QNAP TS-419P.
    In den folgenden Schritten wird das vorgehen beschrieben


    1. Anmelden über eine SSH Konsole auf der QNAP


    2. Bestimmen wo sich das Optware Verzeichnis befindet
    cd /etc/init.d
    ls -l Optware.sh
    lrwxrwxrwx 1 admin administ 40 Sep 15 08:31 Optware.sh -> /share/HDA_DATA/.qpkg/Optware/Optware.sh*


    Das Optware Basisverzeichnis ist bei mir also /share/HDA_DATA/.qpkg/Optware/


    3. Anlegen von benötigten Verzeichnissen
    cd /share/HDA_DATA/.qpkg/Optware/
    cd etc
    mkdir rcS.d
    mkdir rcK.d


    (ggf. anlegen von init.d falls nicht vorhanden bei mir ist es vorhanden!: prüfen mit ls init.d anlegen mit mkdir init.d)


    4. Wechsel in das init.d Verzeichnis (unter /share/HDA_DATA/.qpkg/Optware/etc )
    cd init.d


    5. Anlegen eines Start/Stop scriptes (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d )
    (Anlegen eines Testscripts mit dem folgenden Aufbau und speichern unter test.sh)


    Bash
    #!/bin/sh## 20100915, AP test.sh own init.d script## Scrip to start / stop  testcase "$1" in  start)     echo  "[$1] Starting ..."     /sbin/log_tool -a "TEST started" -t 0 -u SYSTEM -m LOCAL  ;;  stop)    echo "[$1] Shutting down ..."    /sbin/log_tool -a "TEST shutdown" -t 0 -u SYSTEM -m LOCAL   ;;   restart)     $0 stop     $0 start   ;;   *)     echo "Usage: $1 {start|stop|restart}"     exit 1esacexit 0


    6. Anlegen vom rcS_admin script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware)


    Bash
    #!/bin/sh# Start all init scripts in /share/HDA_DATA/.qpkg/Optware/etc/rcS.d# executing them in numerical order.## 20100915, AP modify this for own rcS scrips## this version is spezial ! parm1 must be the QPKD_DIR build in Optware.shQPKG_DIR=$1#echo "[rcS_admin] exec own StartScripts in $QPKG_DIR/etc/rcS.d/"for i in $QPKG_DIR/etc/rcS.d/S??* ;do     # Ignore dangling symlinks (if any).     #[ ! -f "$i" ] && continue     echo "[rcS_admin] exec own StartScript $i"     case "$i" in    *.sh)        # Source shell script for speed.        (        trap - INT QUIT TSTP        set start        . $i        )        ;;    *)        # No sh extension, so fork subprocess.        $i start        ;;    esacdone


    7. Anlegen vom rcK script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d/)


    Bash
    #!/bin/sh# Start all init scripts in /share/HDA_DATA/.qpkg/Optware/etc/rcS.d# executing them in numerical order.## 20100915, AP modify this for own rcS scrips## this version is spezial ! parm1 must be the QPKD_DIR build in Optware.shQPKG_DIR=$1#echo "[rcS_admin] exec own StartScripts in $QPKG_DIR/etc/rcS.d/"for i in $QPKG_DIR/etc/rcS.d/S??* ;do     # Ignore dangling symlinks (if any).     #[ ! -f "$i" ] && continue     echo "[rcS_admin] exec own StartScript $i"     case "$i" in    *.sh)        # Source shell script for speed.        (        trap - INT QUIT TSTP        set start        . $i        )        ;;    *)        # No sh extension, so fork subprocess.        $i start        ;;    esacdone


    8. Symbolischen link unter rcS.d anlegen (unter /share/HDA_DATA/.qpkg/Optware/etc/rcS.d/ )
    cd ../rcS.d
    ln -s ./S10test ../init.d/test.sh


    9. Symbolischen link unter rcK.d anlegen (unter /share/HDA_DATA/.qpkg/Optware/etc/rcK.d/ )
    cd ../rcK.d
    ln -s ./K90test ../init.d/test.sh


    10. Modikation des Scriptes Optware.sh unter (unter /share/HDA_DATA/.qpkg/Optware/)


    Dieses ist das Optware.sh Script so wie es auf meiner QNAP TS-419P gespeichert ist.
    Die Änderungen an dem Script habe ich durch die Bemerkung: "# 20100915, AP" gemarkt.



    Die Dateiatribute sollten so aussehen:


    -rwxr-xr-x 1 admin administ 707 Sep 15 06:21 ./init.d/rcK_admin
    -rwxr-xr-x 1 admin administ 695 Sep 15 06:21 ./init.d/rcS_admin
    -rwxr-xr-x 1 admin administ 304 Sep 15 06:39 ./init.d/test.sh


    lrwxrwxrwx 1 admin administ 22 Sep 15 08:07 ./rcK.d/K90test -> ../init.d/test.sh
    lrwxrwxrwx 1 admin administ 22 Sep 15 08:06 ./rcS.d/S10test -> ../init.d/test.sh


    Fazit:
    Mit diesen Modifikationen können nun eigene Startup und Shutdown Proceduren eingebunden werden.
    Der Vorteil dieser Variante ist, dass bei dem SchutDown die Prozesse sauber beendet werden können und so Fehler(-meldungen) bei dem nächsten Start vermieden werden.

    Einmal editiert, zuletzt von Terz () aus folgendem Grund: Thema verschoben

  • Hallo Andy,


    stimmt, das ist definitiv der bessere Weg, Anwendungen, die über Optware installiert worden sind zu starten. Wobei ich einfach mal auf den Beitrag im QNAP-Wiki aufmerksam machen möchte.
    Weil wenn man schon mal die Optware.sh-Datei anfassen muss, kann man auch noch einen Fehler beseitigen. Es existiert ein Fehler mit den Pfad-Variablen, in Abhänigkeit von der eingesetzten Firmware-Version. Und das hat ausgesprochen unschöne Nebenwirkungen.


    Bei einem ordentlich aktivierten Optware mit gesetzen Pfaden sollte/muss das als Ergebnis kommen.

    Code
    # echo $PATH/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin


    Der Teil im Wiki: Running /opt/etc/init.d/* on startup vereinfacht noch einiges mehr. Einfach Symlinks unter /opt/etc/init.d/ (sofern das Verzeichnis existiert ansonsten mkdir) anlegen und fertig.


    Einfach den Ausschnit in der Optware.sh Datei suchen und ersetzen:



    Definitiv eine kleine Modifikation mit sehr großer Wirkung. Bitte achtet darauf, das ihr die Dateiattribute nicht verändert und achtet auch darauf was ihr ersetzt.

  • Hallo golgorod,


    JA, das dort beschriebene Verfahren ist einfacher, jedoch kann es abhängige Reihenfolgen nicht auflösen:
    gestartet A-B-C wobei C z.B. B braucht
    stoppen C-B-A
    und insofern ist der einfachere Weg eben nicht immer der Bessere. ;)


    Der von Dir angegebene Pfad ist wohl, besonders mit X11, nicht bei allen gültig. Also achtet darauf was Ihr dort eintragt!
    Wer will kann ja das initscript von optware im rcS verheiraten (symbolischer link).


    Grüße Andy

  • Sorry für die verspätete Antwort,


    also Abhängigkeiten sind immer so eine Sache und es gibt viele Wege etwas zu lösen - das ist auch gut so :). Bislang war das bei mir nicht notwendig darauf beim Optware Start einzugehen. Aber viel wichtiger ist das Problem mit dem Pfad. Mein genannter Pfad war nur ein Beispiel.
    Nur wenn man Optware einsetzt, sollte zumindest der Suchpfad stimmen finde ich. Daher sollte /opt/bin:/opt/sbin im Pfad vorne stehen. Und das ist nicht unbedingt der Fall, bzw. das ist abhängig von der Firmware und der Version von Optware. Letztlich vertauscht der Wiki Artikel einfach nur die Position der beiden Einträge - von Hinten nach Vorne.


    Viele Grüße

  • Hallo golgorod,


    wer möchte kann natürlich den Such-Pfad anpassen ... und was immer noch so gewünscht ist ...
    und klar - es gibt viele Wege die nach Rom führen - ich habe ja auch nur einen gangbaren davon aufgezeigt.


    Bei dem Verfahren (Starten/Stoppen von eigenen Diensten) geht es in Hauptsache um die, die SVN, openvpn und andere Dienste/Server einsetzten.
    Denn nur so können dann beim Shutdown offene Dateien vermieden und Abhängigkeiten aufgelöst werden und das ist einfach sauberer/besser, als die noch laufenden Prozesse einfach durch die Abschaltung zu beenden (was ja eher einem Spannungsausfall gleichkommt).


    Grüße Andy

  • Hi,


    der Fehlerteufel hat zugeschlagen und hat einen Anfänger wie mich etwas Zeit gekostet zu finden.
    Damit andere nicht auch reinfallen, die einfach abtippen wie ich ;)


    Fett die Korrektur gekennzeichnet:


    Zitat


    Anlegen vom rcK_admin script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d/)



    Zitat


    6. Anlegen vom rcS_admin script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d/)


    Zitat


    ln -s ../init.d/test.sh S90test


    Gruss R.

  • Hallo ritchie,


    verzeihe, dass mir so blöde Fehler in der Zusammenfassung unterlaufen sind.
    Leider kann ich meinen Originalbeitrag nicht mehr korrigieren...


    Zitat

    Anlegen vom rcK_admin script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d/)


    Ja, dass ist so zu korrigieren!



    Zitat

    6. Anlegen vom rcS_admin script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d/)


    Ja, dass ist so zu korrigieren!



    Zitat


    ln -s ../init.d/test.sh S90test


    Je nach dem in welchem Verzeichnis man sich gerade befindet ist der relative Pfad zu verwenden/zu setzen.
    JEDOCH ist es nicht zwingend, dass das script - besser der link - unter rcS und rcK die gleiche Nummer im Dateinamen trägt.
    Die Nummer verbunden mit S oder K gibt die Reihenfolge des Start/Stop an.
    z.B.: Man will die Prozesse A und B starten. Der Prozess B benötigt den bereits gestarteten Prozess A und zwar durchgehend.
    So starte ich A (=S10A) und dann B (=S20B).
    Beim Stoppen muss ich nun zuerst B und dann A stoppen also z.B. B (=S80B) und A (=S90A) - Umkehr der Reihenfolge.
    Die Vergabe von xx in Sxx und Kxx ist also nur von der gewünschten Reihenfolge abhängig.


    Gruß Andy




    Gruss R.[/quote]

  • Hallo Andy,


    eigentlich war das für mich sogar gut. So habe ich mich mit der Art und Weise auseinandergesetzt und besser verstanden.
    Das mit der Reihenfolge habe ich mir dann auch angelesen und sogar in meiner Lösung verwendet.


    Trotz allem, vielen Dank für Deine Lösung, mit ihr konnte ich mein Problem gut Lösungen
    und diese Art ist besser als über die autorun.sh. Aber diese Methode hat auch seine Berechtigung.
    (Installieren von Scripten)


    Gruss R.