[aus dem Thema QNAP autostop.sh - Skripte beim Herunterfahren automatisch ausführen kopiert.]
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.sh" 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:
#!/bin/sh
#autorun.sh
start()
{echo `date` Start APP "AutoRun" autorun.sh >> /var/log/autorun.log
# Autorun ausführen bei shutdown/restart/poweroff
ln -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 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
Alles anzeigen
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.
#!/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!"
Alles anzeigen