Gibt es analog zur autorun.sh Methode (https://wiki.qnap.com/wiki/Run…wn_Application_at_Startup) eine Möglichkeit Skripte beim Herunterfahren ausführen zu lassen?
QNAP autostop.sh - Skripte beim Herunterfahren automatisch ausführen
- nnaass
- Erledigt
-
-
hallo,
mit einem Trick durch die Hintertür geht dies!
Du richtest dir "autorun" ein. Kannst ja dafür auch mein Script, zu finden in Installation von OWNCloud , nutzen. Das LIBXML Zeug - wenn du es dann nicht brauchst - kannst du aus der localen autorun.sh entfernen.
Du erstellst dir ein Script in dem all dies gemacht wird, was du beim runterfahren ausführen willst. Durch die locale autorun.sh lässt du dieses Script immer nach /etc/init.d kopieren. Ebenso lässt du durch die locale autorun.sh einen symlink in /etc/rcK.d erstellen der auf dein Script in /etc/init.d verweist. Achtung - auf die Namenskonvention achten die in /etc/rcK.d benutzt wird. Die Nummerierung gibt die Reihenfolge der Abarbeitung der Scripte beim Runterfahren an!
Das Script auf das ich oben verweise macht dies alles für dich! Du musst nur noch in die autorun.sh (in der stop Sektion) die Dinge eintragen was beim reboot/shutdown/poweroff gemacht werden soll.mfg kasimodo
-
Danke kasimodo, aber so ganz verstehe ich Deinen Ansatz nicht oder kann Deinen Trick nicht nachvollziehen.
Ich suche eine Methode welche beim initiierten Herunterfahren des NAS mir noch zusätzlich die Möglichkeit gibt ein Skript auszuführen.zum Beispiel: Ich kenne Ansätze unter Linux-Distributionen welche beim Wechsel des runlevels reagieren, dass wäre perfekt.... und da bei unseren QNAPs ja ein Ubuntu unter der Haube steckt, müsste da doch was möglich sein ?!
-
Genau das macht die autorun.sh in verbindung mit dem symlink in /etc/rcK.d
Auf dem Qnap gibt es unter /etc die beiden Verzeichnisse rcS.d und rcK.d ! in diesen Verzeichnissen sind symlinks auf die Skripte unter /etc/init.d
Beim Booten werden alle mit den Symlinks unter /etc/rcS.d verknüpften Scripte mit dem Parameter "start" ausgeführt.
Beim Runterfahren/Reboot/Shutdown werden alle Skripte die in /etc/rcK.d verknüpft sind mit dem Parameter "stop" ausgeführt.Die mit den Symlinks verknüpften Skripte müssen nicht zwingend unter /etc/init.d gespeichert sein!
Also brauchst du auf deinem System ein Script was mit dem Parameter "stop" aufgerufen werden kann und einen Symlink unter /etc/rcK.d der auf dieses Skript verweist. Da man keine Dateien oder Sysmlinks bootfest unter /etc anlegen kann muss dieser Symlink in /etc/rcK.d bei jedem booten vom NAS neu angelegt werden damit der beim Runterfahren vorhanden ist! Dies kann man mit "autorun" beim Booten realisieren!
Und wenn man schon mal ein Skript anlegt das beim Booten ausgeführt wird, was hindert daran dies Skript auch gleich dafür zu benutzen um dort alles einzutragen was auch beim runterfahren ausgeführt werden soll. Voraussetzung dafür ist, dass dieses Script die Parameter (Argumente) start / stop ünterstützt.Beispiel:
Bash: Start / Stop Skript - autorun.sh#!/bin/sh#autorun.shstart(){echo `date` Start APP "AutoRun" autorun.sh >> /var/log/autorun.log# Autorun ausführen bei shutdown/restart/poweroffln -s /share/MD0_DATA/.qpkg/autorun/autorun.sh /etc/rcK.d/K01autorun# ab hier alles eintragen was noch beim "start" ausgeführt werden soll# Ende - was beim "start" ausgeführt werden soll}stop(){ echo `date` Stop autorun.sh >> /var/log/autorun.log# ab hier alles eintragen was noch beim "STOP" ausgeführt werden soll# Ende - was beim "STOP" ausgeführt werden soll}# 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 ;;esacexit
Eventuell muss noch in Zeile 7 /share/MD0_DATA/.qpkg/autorun/autorun.sh der Pfad angepasst werden!
Das weiter oben verlinkte Skript im anderen Beitrag ist ein Installationsscript was "autorun" auf dem QnapNAS einrichtet unabhänig vom NASTYP !!!!! Funzt auf NAS mit Intel , ARM und auch auf x31 usw.!Alles Klar?
Hier noch mal das überarbeitete Installationsscripte, dass "autorun" auf deinem NAS (unabhänig von der verwendetetn Hardware) einrichtet. Ich habe u.a. noch diverse Kommentare zur Erklärung eingefügt.
Bash: create_autorun.sh
Alles anzeigen#!/bin/sh #Installation - anlegen "autorun.sh" auf einem QNAP NAS für die eigene Anpassungen #------------------------------------------------------ #Hiernach ändern! Soll eventuell vohandene autorun erneuert werden (YES/NO) - Backup anlegen (YES/NO) REWRITE="YES" # YES/NO BACKUP="YES" # YES/NO #--------------- ab hier nichts mehr ändern --------------------------------------- #Ermittlung der Hardware und Festlegen was gemountet werden soll MOUNTPOINT="/tmp/config" BOOT_CONF=`/bin/cat /etc/default_config/BOOT.conf 2>/dev/null` CONFIG_DEV_NODE=`/sbin/getcfg "CONFIG STORAGE" DEVICE_NODE -f /etc/platform.conf` CONFIG_DEV_PART=`/sbin/getcfg "CONFIG STORAGE" FS_ACTIVE_PARTITION -f /etc/platform.conf` CONFIG_DEV_FS=`/sbin/getcfg "CONFIG STORAGE" FS_TYPE -f /etc/platform.conf` # check if the HAL subsystem exist modelname="$(/sbin/getcfg "System" "MODEL" -f /etc/config/uLinux.conf)" if [ -x /sbin/hal_app ]; then BOOT_DEV=$(/sbin/hal_app --get_boot_pd port_id=0) elif [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then BOOT_DEV="/dev/mtdblock" else BOOT_DEV="/dev/sdx" fi if [ "x$CONFIG_DEV_NODE" != "x" ]; then DEV_NAS_CONFIG=${CONFIG_DEV_NODE}${CONFIG_DEV_PART} elif [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then if [ -f /etc/IS_TAS ]; then DEV_NAS_CONFIG=${BOOT_DEV}7 else DEV_NAS_CONFIG=${BOOT_DEV}5 fi else DEV_NAS_CONFIG=${BOOT_DEV}6 fi if [ "x$CONFIG_DEV_NODE" != "x" ]; then if [ "x$CONFIG_DEV_FS" = "xubifs" ]; then /sbin/ubiattach -m $CONFIG_DEV_PART -d 2 /bin/mount -t ubifs ubi2:config /tmp/config -o ro > /dev/null 2>&1 [ ! -f /etc/IS_TAS ] || /bin/mount -t ext4 /dev/mmcblk0p7 /tmp/config else return 0 fi else /bin/mount $DEV_NAS_CONFIG -t ext2 $MOUNTPOINT fi # wenn mount erfolgreich - autorun (MTD) und autorun.sh im localen Filesystem anlegen if [ "$?" = "0" ]; then if [[ -x /tmp/config/autorun.sh && $REWRITE = "NO" ]] ; then #echo "SUCCESS! autorun.sh vorhanden" echo -e "\033[32m "autorun.sh"(MTD)ist schon vorhanden \033[0m" - keine neue "autorun.sh" angelegt! umount $MOUNTPOINT #exit else if [[ -e /tmp/config/autorun.sh && $BACKUP = "YES" ]] ; then cp /tmp/config/autorun.sh /tmp/config/autorun.bak ; fi echo -e "\033[32m Neue "autorun.sh"(MTD) wird angelegt! \033[0m" cat > /tmp/config/autorun.sh << "EOF" #!/bin/sh # AUTORUN.SH - "Boot strap" echo `date` Start autorun MTD > /var/log/autorun.log for Auto_Dir in `ls -d /share/* | grep "_DATA" | sort` do if [ -x ${Auto_Dir%/}/.qpkg/autorun/autorun.sh ]; then echo `date` ausführbare "autorun.sh" im Verzeichnis $Auto_Dir/.qpkg/autorun gefunden >> /var/log/autorun.log ${Auto_Dir%/}/.qpkg/autorun/autorun.sh start exit fi done echo `date` keine ausführbare "autorun.sh" gefunden EOF chmod 755 /tmp/config/autorun.sh umount $MOUNTPOINT #ausführen der Autorun in der Konfiguration aktivieren /sbin/setcfg Misc "Autorun" "TRUE" fi else echo -e "\033[31m ERROR \033[0m " Fehler beim Ausführen von /bin/mount $DEV_NAS_CONFIG -t ext2 $MOUNTPOINT exit fi #locale autorun anlegen for ROOT_SHARE in `ls -d /share/* | grep "_DATA" | sort` do if [ -d ${ROOT_SHARE%/}/.qpkg ]; then Auto_Dir=${ROOT_SHARE%/}/.qpkg/autorun ; fi done if [[ -e ${Auto_Dir%/}/autorun.sh && $REWRITE = "NO" ]]; then echo -e "\033[32m ${Auto_Dir%/}/autorun.sh (local) \033[0m" ist schon vorhanden Script wird beendet! exit else echo -e "\033[32m Neue "autorun.sh" (local) wird angelegt! \033[0m" if [[ -e ${Auto_Dir%/}/autorun.sh && $BACKUP = "YES" ]] ; then cp ${Auto_Dir%/}/autorun.sh ${Auto_Dir%/}/autorun.bak ; fi if [ ! -d ${Auto_Dir%/} ]; then mkdir ${Auto_Dir%/} ;fi cat > ${Auto_Dir%/}/autorun.sh << "EOF" #!/bin/sh #autorun.sh start() { echo `date` Start APP "AutoRun" autorun.sh >> /var/log/autorun.log # Autorun ausführen bei shutdown/restart/poweroff EOF echo ln -s ${Auto_Dir%/}"/autorun.sh /etc/rcK.d/K01autorun >null 2>&1">> ${Auto_Dir%/}/autorun.sh cat >> ${Auto_Dir%/}/autorun.sh << "EOF" #====================================================================== # ab hier alles eintragen was noch beim "start" ausgeführt werden soll #Beispiel: libxml2 neue Version für owncloud bzw. nextcloud file="/usr/lib/libxml2.so.2.6.30" if [[ -e $file && ! -e /usr/lib/org.libxml2.so.2.6.30.org ]]; then mv $file /usr/lib/org.libxml2.so.2.6.30.org cp /usr/local/medialibrary/lib/libxml2.so.2.9.2 $file else cp /usr/local/medialibrary/lib/libxml2.so.2.9.2 $file fi /mnt/ext/opt/apache/bin/apachectl restart #Ende Beispiel # Ende - was beim "start" ausgeführt werden soll #================================================ } stop() { echo `date` Stop autorun.sh >> /var/log/autorun.log #==================================================================== # ab hier alles eintragen was noch beim "stop" ausgeführt werden soll # Ende - was beim "stop" ausgeführt werden soll #================================================ } # you do not need to edit this lines case "$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 exit EOF chmod 755 ${Auto_Dir%/}/autorun.sh echo =========================================================================== echo Deine locale "autorun.sh" befindet sich in ${Auto_Dir%/} echo =========================================================================== fi echo "Fertg! - Ende!"
-
-
Bin derzeit noch im Urlaub - werde ich mir in ca. 2 Wochen aber anschauen. Danke vorab.
Da wohl einige QUser ähnliche Anforderungen haben werde ich versuchen hier eine Step by Step Anleitung für ein einfaches Autostop Skript zu posten (oder Du?). Anhand meiner Anforderung: ein vorher manuell gemountetes NFS share per Autostop (bei Herunterfahren) zu unmounten. Wobei das auszuführende Skript denkbar einfach ist - in meinem Fall nur aus einem Befehl besteht:
Eine Lösung im Q-Forum sollte dann möglichst einfach und für Non-IT-Experts entstehen...... Also ein Autorun.sh skript welches lediglich den Symlink auf das obige Skript in /etc/rcK.d schreibt.
Bin allerdings noch nicht sicher wie ich mein Skript (siehe oben) mit Argumenten wie "start" und "stop" ausstatten kann - Wie Du es als notwendig beschrieben hast. Wobei meinem Skript ja egal wäre welches $1 Argument übergeben wird.... es wird doch immer ausgeführt und stört sich auch nicht an Argumenten - oder liege ich da falsch? -
Alle was du machen möchtest ist schon in den Scripten im oberen von mir Beitrag eingearbeitet.
Du musst nur noch deinen Befehl umount /share/mydata/_temp/mntpoint in die "stop" Sektion eintragen.
-
Danke Kasimodo.
Ich habe noch eine womöglich einfachere Methode recherchiert: Nicht nfs sondern smb mounts in der autorun.sh verwenden! Auch die manuell angelegten smb-mounts (also z.B. via autorun) werden beim Herunterfahren des QNAP automatisch und per default getrennt, so dass das NAS sauber runterfährt.