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

  • Unter dem Menüpunkt -> Systemadministation -> Systemprotokolle im AdminCP vom NAS. Nicht auf der Konsole oder in einem Logfile.


    Also praktisch da wo man wirklich guckt :D


    Grüsse, David

  • Perfekt! Danke für das Script, nun funktioniert - im Gegensatz zu dem im engl. Wiki beschriebenen Optware-Snippet - auch das korrekte Stoppen der Dienste.


    Cheers

    Einmal editiert, zuletzt von Binomico ()

  • Hallo,
    ich habe wahrscheinlich den Fehler bei mir gefunden :oops:

    Zitat


    Vorlage eines init Script's mit "Log" Ausgabe im AdminCP (Starten und Beenden):
    Hier müsste die Zeile:

    Code
    NAME="Servicename"

    geändert werden.


    Welche Service kann ich nutzen? Ich will nichts falsch machen
    Ich möchte nur ausprobieren ob es funktioniert.
    Grüße,
    Jacek

  • Da kannst Du eingeben was Du möchtest.
    z.B.
    NAME="Pyload"


    So würdest Du dann beim starten "Starting pyload" im Admincp sehen.


    Grüsse, David

  • Zitat

    Da kannst Du eingeben was Du möchtest.


    dann sollte ich auch "Strating Servicenahme" unter >>Systemereignisprotokolle sehen. Sehe aber leider nicht :(


    Typ Datum Uhrzeit Benutzer Quellen-IP Computername Inhalt
    2012-02-01 10:10:54 System 127.0.0.1 localhost [Antivirus] Virus definition updated.
    2012-02-01 10:08:56 System 127.0.0.1 localhost System started.
    2012-02-01 10:07:31 System 127.0.0.1 localhost System was shut down on Wed Feb 1 10:07:31 CET 2012.


    Also bei mir tut es noch nicht richtig. Schritte wie früher geschrieben habe ich vor dem reboot noch mal geprüft. Mache es noch mal...
    Der aktuelle autorun.sh befindet sich immer auf der erste Seite, oder?


    Terz,
    vielen dank für dein Geduld und deine Antworten.

  • Habe ich noch mal geprüft.
    1. Skript manuell ausgeführt:

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


    2. Ergebnisse in Systemlog geprüft -> waren da
    3. Reboot -> nicht da


    2012-02-01 11:30:47 System 127.0.0.1 localhost System started.
    2012-02-01 11:29:23 System 127.0.0.1 localhost System was shut down on Wed Feb 1 11:29:23 CET 2012.
    2012-02-01 11:27:13 admin 192.168.1.104 --- [Power Management] System will be restart now.
    2012-02-01 11:25:25 SYSTEM 127.0.0.1 LOCAL Shutting down Startup Test Script
    2012-02-01 11:25:14 SYSTEM 127.0.0.1 LOCAL Starting Startup Test Script


    Also muss etwas mit autorun nicht richtig funktionieren. Anbei autorun.sh noch mal:


    Am TS-219P II ist doch /dev/mtdblock5 für autorun.sh richtig, oder?
    Wie kann es sein dass bei anderen Kollegen alles geklappt hat, bei mir tut es nicht wirklich :(


    Grüße,
    Jacek

  • Zitat

    Am TS-219P II ist doch /dev/mtdblock5 für autorun.sh richtig, oder?

    Jupp


    Die zwei Zeilenumbrüche hast du in deiner autorun.sh schon gefixt?


    #Starting Optware daemons and create shutdown rcK symlink (starting ...


    ln -s ${OPTWARE}/etc/init.d/${optdaemon##*/} ...

  • Ich bins noch mal:

    Zitat

    Init Script's fangen mit einem Grossen S (wie Siegfried) und einer nachfolgenden Zahl an. Ein Beispiel für das Starten von einem openSSH Dienst wäre der Dateiname: S20openssh


    Name des Skriptes habe ich geändert: STest -> S25test

    Code
    [~] # cd /opt/etc/init.d/
    [/opt/etc/init.d] # ls -l
    -rwxr-xr-x    1 admin    administ      106 May 14  2010 S05gconv-modules*
    -rwxr-xr-x    1 admin    administ     1714 Nov 30  2010 S20dbus*
    -rwxr-xr-x    1 admin    administ      614 Feb  1 11:24 S25test*
    [/opt/etc/init.d] #


    und hat es auch nicht geklappt. :(

  • Zitat

    Die zwei Zeilenumbrüche hast du in deiner autorun.sh schon gefixt?


    #Starting Optware daemons and create shutdown rcK symlink (starting ...


    ln -s ${OPTWARE}/etc/init.d/${optdaemon##*/} ...


    Ich habe 1:1 autorun.sh von erster Seite übernommen. Ich schaue es mir genauer an...

  • Das war das! Binomico - vielen Dank! Jetzt kann ich ruhig schlafen. :D
    Funktioniert alles. Danke für den tollen Skript!


    Grüße,
    Jacek

  • Hallo Terz, ich habe nach deinem Wiki payload auf meiner TS459ProII instsalliert. Manuell kann ich es starten. Wo finde ich die autorun.sh, oder kann sie erstellen? Mit dem Wiki komme ich leider nicht klar. Mit der TS119plus klappt es. Leider weis ich nicht mehr, wie ich es da gemacht habe...... :oops:

  • Hallo pointde,


    bin bei der Suche zu einem anderen Thema auf Deine Frage gestoßen.
    Sollest Du noch nichts gefunden haben, so habe ich folgende Info für Dich.


    Die autorun.sh mußt Du beim TS459Pro auf /dev/sdx6 anlegen.
    Ich selbst habe mich für eine Variante entschieden, die unter http://forum.qnap.com/viewtopic.php?p=87062 beschrieben steht.
    Die Idee aus der autorun.sh nur einmal eine autorunmaster aus /share/MD0_DATA/cutsom aufzurufen gefällt mir.
    Dann braucht man nicht immer auf dem boot device umherschreiben und spart sich dass laufende mounten und unmounten.


    Gruß
    penatus

  • Meine Lösung zu vielen der vorstehenden Fragen:


    Die autorun.sh wird aus /etc/init.d/init_nas.sh heraus aufgerufen.

    Code
    # grep -l autorun /etc/init.d/*/etc/init.d/init_nas.sh


    Im Verzeichnis /etc/rcS.d sehen wir:

    Code
    d# ls -l /etc/rcS.dlrwxrwxrwx    1 admin    administ       32 Jun 20 11:13 QS100JRE -> /share/MD0_DATA/.qpkg/JRE/jre.sh*lrwxrwxrwx    1 admin    administ       40 Jun 20 11:13 QS101Optware -> /share/MD0_DATA/.qpkg/Optware/Optware.sh*lrwxrwxrwx    1 admin    administ       18 Jun  5 05:20 S30mountall -> ../init.d/mountall*        [... viele Zeilen gelöscht ...]lrwxrwxrwx    1 admin    administ       18 Jun  5 05:20 S97upnpd -> ../init.d/upnpd.sh*lrwxrwxrwx    1 admin    administ       21 Jun  5 05:20 S98init_nas -> ../init.d/init_nas.sh*lrwxrwxrwx    1 admin    administ       18 Jun  5 05:20 S99atalk -> ../init.d/atalk.sh*lrwxrwxrwx    1 admin    administ       26 Jun  5 05:20 S99centerim -> ../init.d/init_centerim.sh*....


    Also: autorun.sh wird vor Optware.sh aufgerufen, was viele der beklagten Fehler erklärt: manuell aufgerufen funktionieren viele Skripte, die beim Systemstart versagen .... weil die Reihenfolge nicht stimmt.
    Das lässt sich auch im Sytem-Log nachvollziehen, wenn man die Skripte Logeinträge schreiben läßt.


    Persistent verankert in /tmp/config/autorun.sh :

    Bash
    #!/bin/sh#CUSTOM=/share/MD0_DATA/.custom[ -x ${CUSTOM}/autorun.sh ] && exec ${CUSTOM}/autorun.sh##


    (Hinweis: alle 3 Möglichkeiten (call, symlink, exec) funktionieren, ich habe mich aus mehreren Gründen für die "exec-Variante" entschieden.)


    Meine eigentliche autorun.sh (/share/MD0_DATA/.custom/autorun.sh) beginnt mit:

    Bash
    #!/bin/sh# autorun.sh - script called from S98init_nas -> /etc/init.d/init_nas.sh#CUSTOM=${CUSTOM:-/share/MD0_DATA/.custom}export CUSTOM/sbin/log_tool -a "AUTORUN:  ${CUSTOM}/autorun.sh"...


    und meine Optware.sh beginnt analog:

    Bash
    #!/bin/sh/sbin/log_tool -a "OPTWARE:  initialisation"...


    Innerhalb Optware.sh wird standardmässig das gemacht, was viele Autoren in ihrer autorun.sh - verfrüht - ebenfalls machen,
    insbesondere wird der Symlink /opt -> /share/MD0_DATA/.qpkg/Optware angelegt und später die Environment-Variable PATH
    in /etc/profile um die /opt-Pfade ergänzt.
    Über die Reihenfolge kann man streiten, ich halte es für sinnvoller, die /opt-Pfade an den Anfang zu stellen, also

    Code
    # adding Ipkg apps into system path ...        /bin/cat /etc/profile | /bin/grep "PATH" | /bin/grep "/opt/bin" 1>>/dev/null 2>>/dev/null##      [ $? -ne 0 ] && /bin/echo "export PATH=\$PATH":/opt/bin:/opt/sbin >> /etc/profile        [ $? -ne 0 ] && /bin/echo "export PATH=/opt/bin:/opt/sbin:\$PATH" >> /etc/profile        ...


    Damit zu dem, was ich eigentlich sagen will:
    wenn wir schon die Optware.sh ändern (patchen), warum dann nicht gleich richtig? Alle das Optware-System betreffenden Ergänzungen und Initialisierungen sollten in Optware.sh untergebracht werden, nicht in der autorun.sh !
    Aufgefallen ist mir das erst, weil das Konstrukt

    Code
    #load libs if directory exists
       if [ -d /opt/lib ]; then
          echo "/opt/lib" >> /etc/ld.so.conf
          /sbin/ldconfig
       fi


    in der autorun.sh nicht funktioniert, nicht funktionieren kann.


    Mein System ist eine TS-509 Pro mit Firmware 3.7.0, bei anderen Systemen können die Pfade anders aussehen.

  • Hallo,
    Seit ich FW 3.7.1 Build 20120615 auf meinem 219 II installiert habe sehe ich keine /opt/etc/init.id Verzeichnis.
    Könnte jemand die Prozedur schrittweise anpassen? Leider verstehe ich Aktualisierung der Posts von 2012 nicht ganz... :(


    Grüße,
    J

  • Zitat von "jdebs"

    habe sehe ich keine /opt/etc/init.id Verzeichnis.


    Dieses Verzeichnis hat auch noch nie existiert, es sei denn, du hättest es angelegt.
    Werde aber aus deinem Post nicht schlau, was du eigentlich willst.

  • Zitat

    Werde aber aus deinem Post nicht schlau, was du eigentlich willst


    Ich will meine Startupskripte am laufenden haben. In FW 3.5 habe ich das Verzeichnis /opt/etc/init.id gehabt wovon die Startupskripte gelesen und ausgeführt wurden. Nach dem update verschwendete /opt/etc/init.id Ich dachte das Verzeichnis wird automatisch erstellt.


    Das Problem löst sich wenn ich /opt/etc/init.id manuell erschaffe. Dann meine Startupskripte werden ausgeführt.


    Danke und Grüße,
    Jacek

  • Hallo Leute, habe ein kleines Problem und bin ein Linux Anfänger.
    Habe mir letze Woche eine QNAP 269 Pro gekauft und bin damit sehr zufrieden.
    Habe dort auch Pyload installiert und klappt Problemlos - auch das Autostart


    Jetzt habe ich folgendes Problem. Da ich ein Oscam Server einrichten will möchte ich diesen auch per Autostart starten, das funktioniert allerdings nicht.
    Derzeit habe ich folgende Files. Ich führe hier auch den Autostart für Pyload an, der allerdings funktioniert


    share/MD0_Data/.qpkg/autorun/autorun.sh

    Bash
    #!/bin/sh#Determine optware directory and symlink it to /optfor optwaredirexists in `ls -d /share/* | grep "_DATA" | sort`do  #optware was determined  if [ -d ${optwaredirexists%/}/.qpkg/Optware ]; then    OPTWARE=${optwaredirexists%/}/.qpkg/Optware    #optware is already symlinked    if [ -h /opt ]; then      #symlinked but wrong directory      if [ $(readlink "/opt") != ${OPTWARE} ]; then        rm -Rf /opt        ln -sf ${OPTWARE} /opt      fi    #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  fidone#execute if OPTWARE was determinedif [ ! -z ${OPTWARE} ]; then  #set environment variables  SET_ENV_VARS="/opt/bin:/opt/sbin:/usr/local/bin:/usr/local/sbin"  export PATH=$PATH:$SET_ENV_VARS  echo "export PATH=$PATH" >> /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  fifi


    mnt/HDA_ROOT/.config/qpkg.conf

    Code
    [Squid]Name = SquidVersion = 3.1.16.5Author = QNAP Systems, Inc.QPKG_File = Squid.qpkgDate = 2013-07-11Shell = /share/MD0_DATA/.qpkg/Squid/Squid.shService_Port = 3128Install_Path = /share/MD0_DATA/.qpkg/SquidWebUI = /squidEnable = TRUEClass = nullStatus = completecfg:qpkg_squid.conf = dc130b14295ea09b97e63b009a053f27cfg:manual_squid.conf = cdd17308060d703cde27b38b1f70e4e6[JRE]Name = JREClass = nullStatus = completeVersion = 6.0.22Enable = TRUEQPKG_File = JRE.qpkgDate = 2013-07-11Shell = /share/MD0_DATA/.qpkg/JRE/jre.shInstall_Path = /share/MD0_DATA/.qpkg/JREAuthor = Optimus[Optware]Name = OptwareClass = nullStatus = completeVersion = 0.99.163Author = SL1000QPKG_File = Optware.qpkgDate = 2013-07-11Shell = /share/MD0_DATA/.qpkg/Optware/Optware.shInstall_Path = /share/MD0_DATA/.qpkg/OptwareWebUI = /Optware/Enable = TRUE[TwonkyMedia]Name = TwonkyMediaClass = nullStatus = completeVersion = 7.0.13Enable = TRUEQPKG_File = TwonkyMedia.qpkgDate = 2013-07-11Shell = /share/MD0_DATA/.qpkg/TwonkyMedia/twonkymedia6.shInstall_Path = /share/MD0_DATA/.qpkg/TwonkyMediaWeb_Port = 9000WebUI = /Pid_File = /tmp/mediaserver.pidAuthor = QNAP Systems, Inc.[autorun]Name = autorunVersion = 0.1Author = neomiliumDate = 2013-05-06Shell = /share/MD0_DATA/.qpkg/autorun/autorun.shInstall_Path = /share/MD0_DATA/.qpkg/autorunEnable = TRUE[iStat]Name = iStat[phpMyAdmin]Name = phpMyAdminClass = nullStatus = completeVersion = 3.3.5Enable = UNKNOWNQPKG_File = phpMyAdmin.qpkgDate = 2013-07-12Install_Path = /share/Web/phpMyAdminConfig_Path = /share/Web/phpMyAdmin/config.inc.phpWeb_Port = 80WebUI = /phpMyAdmin/Author = QNAP Systems, Inc.


    share/MD0_Data/.qpkg/optware/etc/init.d/S10pyload

    Bash
    #!/bin/shstart(){   echo "Starting "   /opt/pyload/pyLoadCore.py --configdir=/opt/etc/pyload --daemon}stop(){   echo "Shutting down "   /opt/pyload/pyLoadCore.py --configdir=/opt/etc/pyload --quit}# 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


    share/MD0_Data/.qpkg/optware/etc/init.d/S20oscam hier muss ein Fehler sein!
    Wenn ich per Telnet oder Putty einlogge kann ich mit
    starten: /mnt/HDA_ROOT/.config/cs/bin/./oscam -b -c /mnt/HDA_ROOT/.config/cs/etc
    stoppen: killall -9 oscam
    Die Dateien von Oscam liegen auf mnt/HDA_ROOT/.config/cs dort gibt es zwei Unterordner mit bin und etc... unter bin liegen die binarys für den kartenleser und unter etc die oscam files.
    per telnet und putty kann ich manuell starten



    Bitte um Hilfe. Irgendwas mache ich falsch

  • Zitat von "winklernorbert28"
    Code
    ...
    
    
    start()
    {
       echo "Starting "
       /mnt/HDA_ROOT/.config/cs/bin/./oscam -b -c /mnt/HDA_ROOT/.config/cs/etc
    }
     
    ...


    Bitte um Hilfe. Irgendwas mache ich falsch


    Der Pfad ist doch bestimmt <somepath>/bin/oscam und nicht <somepath>/bin/./oscam


    . bedeutet "dieses Verzeichnis". Genauso wie .. "Mutterverzeichnis" bedeutet. Daher ja auch "cd ..". Wenn du "cd ." tippst, dann landest du im selben Verzeichnis.


    Als Shell-Neuling hat dich das bestimmt verwirrt, weil du wohl oscam mit dem Befehl "./oscam" von Hand gestartet hattest.