[SCRIPT] autorun.sh - Optware Dienste starten und beenden

  • Hallo felsi,


    warum es bei dir nicht automatisch startet kann ich dir leider nicht sagen. Jedoch scheint mir deine S20pyload (in der init.d fällt das .sh glaub weg) nicht ganz richtig zu sein. Also vor "pyLoadCore.py" kommt normal noch "python" was bei dir fehlt.


    Kannst ja mein pyLoad Script verwenden, wenn du willst. Das funktioniert bei mir auf jedenfall astrein.




    Mit dem Editor vi hate ich auf dem QNAP schon so manche Probleme. Seitdem verwende ich nur noch nano und fahre damit gut. Daher wäre es vieleicht noch einen Versuch wert, deine jetzige autorun.sh zu löschen und mit "nano autorun.sh" noch mal neu zu erstellen.

    Einmal editiert, zuletzt von matradix ()

  • Zitat

    Jedoch scheint mir deine S20pyload (in der init.d fällt das .sh glaub weg) nicht ganz richtig zu sein. Also vor "pyLoadCore.py" kommt normal noch "python" was bei dir fehlt.


    Richtig. .sh weg. python musst Du allerdings nicht davor schreiben. Das Path Enviroment wird in der autorun.sh gesetzt.


    Bez. Pyload habe ich gestern auch mal das Pyload Wiki etwas gepflegt. Ich werde wegen der grossen Nachfrage und deren Probleme immer mal das wiki auf der Pyload Seite aktualisieren.
    http://pyload.org/de:install_p…on_router#qnap_nas_server


    Ich denke auch nicht wirklich dass es an der autorun.sh liegt... ;) Eventuell hilft auch der Wiki eintrag weiter :) Zumindest probieren könnte man es so noch einmal. Die Fragen zu Pyload sollten allerdings nicht alle hier hin ^^ Sondern eher in die Subkategorie pyload (in den Anleitungen) hier im Forum.



    Grüsse, David

  • So,


    noch einmal aktualisiert.
    Nachdem mir felsi noch mal etwas input darüber gegeben hat, scheint es den Pfad /opt bei einigen Systemen mit einen Symlink oder Pfad zu geben, oder er existiert überhaupt nicht. Im Prinzip könnte ich das auch einfach mit einem "rm -Rf" vorher löschen, so macht es die optware auch, allerdings kämen dann eventuell "Rückfragen". ;)
    Im Prinzip ist jetzt alles was möglich wäre implementiert und es wird auch geprüft ob der Pfad /opt beim starten der autorun "noch falsch" (also nicht zu der Optware) gelinkt ist.


    Die autorun.sh sollte jetzt bei allen Variationen funktionieren.


    Grüsse, David

  • Leider, leider funktioniert es bei mir immer noch nicht :(
    Problem bleibt bestehen. Stoße ich die autorun.sh von Hand an


    cd /tmp/config
    ./autorun.sh


    wird Pyload ordnungsgemäß gestartet. Also kann es ja nicht am init.d-Script liegen, richtig?


    Ich verzweifel echt noch mal mit dem Autostart-Mist :(

  • Es war vorher wie bei mir ...


    mit der neuen autostart.sh (danke nochmal an terz :thumb: )... hat es dann funktioniert....


    kann es sein dass die autorun.sh vor dem optware dienst startet ? kann man die autorun.sh nicht verzögert starten (Z.B erst nach 1 -2 min) ?

  • Richtig, bei einigen startet die autorun.sh vor der optware bei anderen nicht.
    Du kannst aber eigentlich optware im AdminCP auch deaktivieren :D
    Sobald Du es installiert hast sucht die autorun.sh ja nach der optware, macht das identische und sogar noch etwas mehr ;)
    Also sobald optware installiert ist fängt es an zu rödeln ;)


    Grüsse, David

  • Konntest du schon etwas erreichen, felsi?
    Der manuelle Start funktioniert einwandfrei.


    Also bei mir ist es das Selbe.



    Wenn ich jedoch das Optware QPKG deaktiviere wird auch der opt Ordner nicht angelegt.
    somit kann die autorun.sh nicht auf das /opt/... zugreifen um die init scripts zu laden.


    Generell vermute ich bei mir auch, dassh die autorun.sh vor dem Start des Optware QPKG gestartet wird und somit ebenfalls das opt Verzeichnis nicht da ist.



    Kann jemand helfen?

    Einmal editiert, zuletzt von christian () aus folgendem Grund: Doppelte Beiträge vermeiden, siehe Forenregeln!

  • Hallo,
    ist es mit dieser Version auch möglich, dass die editierte crontab nach einem Neustart nicht wieder gelöscht wird?
    Ich möchte nämlich dass Streamripper zu einer bestimmten Zeit eine Aufnahme startet. Ohne Neustart funktioniert das auch alles wunderbar, nur danach ist ja die editierte crontab wieder gelöscht.


    Ich hab die autorun.sh wie beschrieben editiert. Dann eine Datei S1autorun.sh angelegt in /opt/etc/init.d und mit den Befehlen aus Qnapedia crontab befüllt: http://wiki.qnap.com/wiki/Add_items_to_crontab . Danach ausführbar gemacht. Nach einem Neustart ist die crontab aber wieder gelöscht.


    Ist dies generell möglich, oder muss ich hierzu die autorun.sh direkt editieren. Oder etwa die Befehle für mein NAS TS-210 anpassen.


    Bin für jede Hilfestellung dankbar.


    Viele Grüße


    Philipp


    Edit:
    Hier nochmal meine nach dem crontab wiki angepasste S1autorun.sh



    Wenn ich die Datei in Putty starte, aktualisiert sich die crontab und startet meine rfc.sh
    Wenn ich allerdings den Server neustarte, funktioniert das ganze nicht. Die crontab wird nicht angepasst.


    Wo kann der Fehler noch liegen, ich probier schon seit Stunden rum.


    Viele Grüße


    Philipp

  • Niemand eine Idee zu meinen Problem, ich hab so viele coole IPKGs gefunden die ich ausprobieren möchte aber ohne eine laufenden Autorun.sh bringt mir das nicht viel.

  • phillow
    Benenne mal deine Datei um (init.d script's sind ohne .sh am ende) und setze mal den execute flag.

    Code
    cd /opt/etc/init.d


    Code
    mv S1autorun.sh S1autorun


    Code
    chmod +x S1autorun


    Dann dürfte diese Zeile hier auf jeden fall probleme machen:

    Code
    crontab -l


    Ein init.d script sollte keinerlei ausgaben haben. Du müsstest das wenn dann redirecten, bei unison ist es genau so.


    Änderungen in der crontab sind aber eigentlich "permanent", das heisst wenn Du die crontab editierst, dann bleibt's auch nach einem Neustart resistent.


    Ich habe jetzt mal den 1. Post editiert.
    http://forum.qnapclub.de/viewt…08&t=14277&p=78297#p78297
    Bitte schaut euch mal da ab Änderung 7. Juli 2011 wie man überprüfen kann, ob das init.d script überhaupt ausgeführt wird. ;)
    Wenn es ausgeführt wird, dann ist mit der autorun.sh alles in ordnung, jedoch Passt dann im init.d script etwas nicht, was wahrscheinlicher ist als das die autorun.sh bei den ein oder anderen nix macht.


    lg, David

  • Danke für die Antwort.
    Hab das Problem mit crontab mittlerweile lösen können. Hab den kompletten Pfad in meinem Skript angegeben. Jetzt startet der Cronjob korrekt auch nach einem Reboot. Somit brauch ich auch keine autorun.

  • Right there, hatte ich mir schon fast gedacht ;)
    Crontab ist schon was permanentes (also Änderungen darin).


    Grüsse, David

  • Also bei mir wird nichts im Log angezeigt. Ich weiß daher auch nicht ob die autorun.sh nicht funktioniert (die ja die S10pload mitzieht) oder die eigentliche S10pyload.


    Warum nur startet es einwadnfrei, wenn ich entweder die autorun.sh oder auch die S10pyload der Hand starte

    Code
    ./S10pyload

    oder

    Code
    ./autorun.sh


    Ich hänge beide mal an (ohne die LOG Option):


    autorun.sh


    Bash
    #!/bin/sh    #Determine Optware Directory and Symlink it to /opt if /opt does not exists    for optwaredirexists in /share/HDA_DATA /share/HDB_DATA /share/HDC_DATA /share/HDD_DATA /share/HDE_DATA /share/HDF_DATA /share/HDG_DATA /share/HDH_DATA /share/MD0_DATA /share/MD1_DATA /share/MD2_DATA /share/MD3_DATA; do      #if optware qpkg was determined      if [ -d ${optwaredirexists}/.qpkg/Optware ]; then        OPTWARE=${optwaredirexists}/.qpkg/Optware        #check if optware is already symlinked        if [ -h /opt ]; then          # if symlinked but wrong directory          if [ $(readlink "/opt") != ${OPTWARE} ]; then            rm -Rf /opt            ln -sf ${OPTWARE} /opt          fi        #check if optware is a directory        elif [ -d /opt ]; then          rm -Rf /opt          ln -sf ${OPTWARE} /opt        #optware does not exist        else          ln -sf ${OPTWARE} /opt        fi      fi    done    #execute if OPTWARE was determined    if [ ! -z ${OPTWARE} ]; then      #set environment variables      echo "export PATH=$PATH:/opt/bin:/opt/sbin:/usr/local/sbin" >> /etc/profile      #load libs if directory exists      if [ -d /opt/lib ]; then        echo "/opt/lib" >> /etc/ld.so.conf        /sbin/ldconfig      fi      #Starting Optware daemons and create shutdown rcK symlink (starting at K200)      #if directory /opt/etc/init.d exists      if [ -d /opt/etc/init.d ]; then        #if directory is not empty        if [ "$(ls -A "/opt/etc/init.d")" ]; then          I=200          for optdaemon in `ls /opt/etc/init.d/S* | grep -v '~' | sort`          do          #execute only if init script is executable          if [ -x ${optdaemon} ]; then            ${optdaemon} start            #create symlink in rcK.d to shutdown the daemon            ln -s ${OPTWARE}/etc/init.d/${optdaemon##*/} /etc/rcK.d/K${I}${optdaemon##*/}            I=$(($I+1))          fi          done        fi      fi    fi




    S10pyload


  • Hi,


    ich habe genau das selbe Problem wie jmberg. Die scripts funtionieren, wenn ich Sie per Hand starte. Und wenn ich die autorun.sh von Hand starte funktionieren die Scripts auch.


    Wenn ich jetzt aber das NAS neustarte, dann laufen zwar die Scripts auch, was ich am logging-Eintrag sehen kann, aber Sie tun nicht ihren Dienst.


    Hier die beiden Scripts die ich automatisch starten lassen will.


    Code
    [/opt/etc/init.d] # cat S10transmission#!/bin/shTRANSMISSION_BIN=/opt/bin/transmission-daemonTRANSMISSION_CONFIG_DIR=/opt/etc/transmissionTRANSMISSION_USER=transmissionNAME="Transmission"start(){   echo "Starting ${NAME}"   /sbin/log_tool -a "Starting ${NAME}" -t 0 -u System -m localhost   su $TRANSMISSION_USER -c "EVENT_NOEPOLL=0 $TRANSMISSION_BIN --config-dir $TRANSMISSION_CONFIG_DIR"}stop(){   echo "Shutting down ${NAME}"   /sbin/log_tool -a "Shutting down ${NAME}" -t 0 -u System -m localhost   if [ -n "`pidof transmission-daemon`" ]; then           kill -9 `pidof transmission-daemon`  fi}# you do not need to edit this linescase "$1" in    start)        start        ;;    stop)        stop        ;;    restart)        # Restarting the Daemon        $0 stop        $0 start        ;;    *)        ## If no parameters are given, print which are avaiable.        echo "Usage: $0 {start|stop|restart}"        exit 1        ;;esac



    Ich bin mir wirklich unschlüssig woran das Problem liegt. Da ich ja aber die log-Einträge habe und daher weiß, dass beim Neustart die Scripts laufen, gehe ich davon aus, dass aus irgendeinem Grund das Starten der daemons beim booten scheitert. Ich weiß aber nicht warum, oder wie ich jetzt hier am besten vorgehe.
    Nach dem Bootvorgang funktioniert das Starten der Daemons ja dann mit den Scripts. Also wenn ich es dann nochmal per Hand "anstoße".


    Ich wäre sehr dankbar für Rat.


    Außedem vielen Dank für die autorun.sh. Wenn es für mich funktionieren würde, dann ist das wirklich eine super Sache. Vor allem, weil man wieder die gewohnte Abstraktionsebene mit den init-scripts bekommt. Das ist einfach eine super und professionelle Lösung. Die autorun.sh sollte in der Form schon Standard in der Firmware sein. TOP!

  • Hallo Xelra,


    bist Du sicher das Deine Scripte starten? Also ich habe mir mit dem Autostart Script meines dns-servers ebenfalls Probleme gehabt.
    Laut Meldung sah es so aus als ob er startete, aber dns Anfragen wurden nicht beantwortet. Nach langem Probieren am Startscript
    fand ich dann herraus das es funktionierte wenn ich im Script die "log-Zeile" mit der "Start-Zeile" vertausche.Also in Deinem Fall:


    su $TRANSMISSION_USER -c "EVENT_NOEPOLL=0 $TRANSMISSION_BIN --config-dir $TRANSMISSION_CONFIG_DIR"
    /sbin/log_tool -a "Starting ${NAME}" -t 0 -u System -m localhost


    Regards

  • Hallo priewald,


    ich habe deinen Tipp ausprobiert, aber leider hat es nichts geändert.


    Ich bin mir sicher, dass die scripts laufen beim boot, weil die log-Einträge sind ja da.


    Code
    411,"Information","2011-07-02","13:34:22","System","127.0.0.1","localhost","Starting SABnzbd"
    410,"Information","2011-07-02","13:34:21","System","127.0.0.1","localhost","Starting Transmission"
    409,"Information","2011-07-02","13:32:07","System","127.0.0.1","localhost","System started."
    408,"Information","2011-07-02","13:29:54","System","127.0.0.1","localhost","System was shut down on Sat Jul  2 13:29:54 CEST 2011."


    Nur die daemons starten eben nicht mit beim boot. Starte ich das script dann direkt nach dem boot von Hand, dann geht alles.

  • Hm.
    Das kann ich mir nicht wirklich so vorstellen....


    1) Wenn optware installiert ist, ruhig mal das QPKG deaktivieren. (Funktioniert mit der autorun.sh ja trotzdem).
    Problem ist, dass das QPKG ohne zu prüfen einfach mal ein rm -RF /opt macht und den symlink neu anlegt, eventuell passiert genau das während der init.d scripts. Es reicht vollkommen wenn das Optware QPKG installiert und deaktiviert ist.


    2) Starten tun ja schon einmal die init script's (und laufen auch im start rein) -> sonst gäbe es den eintrag im AdminCP ja nicht ;)
    Jetzt würde ich einfach mal den Transmission im Vordergrund aufrufen und mir den Text als Log ausgeben lassen:

    Code
    echo "Starting ${NAME}"
       /sbin/log_tool -a "Starting ${NAME}" -t 0 -u System -m localhost
       /bin/touch /var/log/transmission.log
       /bin/chown $TRANSMISSION_USER /var/log/transmission.log
       /opt/bin/su $TRANSMISSION_USER -c "EVENT_NOEPOLL=0 $TRANSMISSION_BIN --config-dir $TRANSMISSION_CONFIG_DIR --foreground" > /var/log/transmission.log 2>&1 &


    Jetzt sollte man in /var/log/transmission.log was finden.


    Gleiches würde ich irgendwann mal mit der sabnzb probieren. (Eines nach dem anderen)


    Grüsse, David

  • Hallo Terz,


    vielen Dank für deinen Post. Als ich deinen Code gesehen habe, da ist mir sofort ein kleiner aber wichtiger Unterschied aufgefallen, den ich gleich getestet habe, noch bevor ich das mit der log-Datei gemacht habe.


    Und zwar stand bei mir


    Code
    su


    und bei dir stand


    Code
    /opt/bin/su

    .


    Ich habe das geändert und jetzt geht es auch beim Start. Also ist es wohl so, dass hier die Pfad-Variable erst nach der autostart.sh angelegt wird.


    Ich freu mich, dass es jetzt geht. Danke für dein Script und dafür, dass du dich mit meinem Problemchen befasst hast.

  • Hallo,


    jetzt bin ichs nochmal.


    Das Problem mit der Umgebungsvariablen scheint leider weitere Kreise zu ziehen.


    Ich hatte es ja so gelöst, dass ich ein


    Code
    /opt/bin/su


    ins Script geschrieben habe. Aber jetzt ist es so, dass beim Starten von SABnzbd es dann auch die Programme unrar und par2 nicht findet. Die befinden sich auch in /opt/bin.


    Starte ich dagegen nachher nochmal SABnzbd von Hand, dann werden unrar und par2 gefunden und SABnzbd funktioniert einwandfrei.


    Code
    /opt/etc/init.d/S20sabnzbd restart


    Ich habe dann natürlich gleich mal in die /etc/profile geschaut. Dort stehen /opt/bin und /opt/sbin im Pfad. Also sind Sie ja dort auch von der autorun.sh erfolgriech hinexportiert worden und das ja zwangsweise auch VOR dem Ausführen des init-Scripts.


    Hat jemand eine Idee? Lösung?


    Achja, und das QPKG habe ich auch deaktiviert, weil nach deiner Beschreibung Terz, könnte das mit rm -Rf /opt ja genau das Problem sein.

  • Habe das Problem vollstädnig gelöst.


    Meine Vermutung war, dass die Einstellungen aus der /etc/profile evtl. vor der autorun.sh laufen und dann auf jeden Fall erst nach den init-Scripts wieder.


    Daher ist die Zeile


    Code
    #set environment variablesecho "export PATH=$PATH:/opt/bin:/opt/sbin:/usr/local/sbin" >> /etc/profile


    in der autorun.sh für die init-Scripts ohne Effekt.
    Ich habe die autorun.sh angepasst:


    Code
    #set environment variables
    echo "export PATH=$PATH:/opt/bin:/opt/sbin:/usr/local/sbin" >> /etc/profile
    export PATH=$PATH:/opt/bin:/opt/sbin:/usr/local/sbin


    Auf die Art und Weise funktioniert jetzt alles. Auch das ursprüngliche Problem mit /opt/bin/su anstelle von einfach nur su ergibt sich damit nicht mehr.
    Ich denke, dass das ein generell gültiger bugfix ist und vielleicht auf Seite 1 dieses Threads in die Musterversion der autorun.sh aufgenommen werden sollte.


    Jetzt bin ich glücklich. Vielen Dank für das Script. :mrgreen: