Beiträge von Davomon1979

    Super danke!


    Heute hab ich den ersten richtigen Test gemacht:

    • Script erkennt korrekt das Qnap herunterfahren soll (BUG: Who Funktion noch nicht angepasst)
    • Script ermittelt den korrekten Wiedereinschaltpunkt
    • Script setzt den korrekten Wiedereinschaltpunkt

    Soweit so gut, aber:


    Code
    1. echo $wake_date > /sys/class/rtc/rtc0/wakealarm


    Setzen des wakealarm auf QNAP führt nicht dazu das die Station zu dem Zeitpunkt wieder hochfährt.


    Weiß jemand wie man QNAP so einen Wiedereinschaltpunkt über SSH setzen kann? - Über das Web interface geht das ja.


    PS: Debian möchte ich eher nicht installieren...

    Das script läuft mal soweit ganz gut.


    Leider sind alle hier genannten Herunterfahrbefehle über SSH falsch.


    Weiß jemand zufällig wie man die QNAP über SSH runterfährt?


    Ich mach mal bis morgen eine wakeup test. - Hab den wakealarm für eine Aufnahme gesetzt.

    Super danke, 2 und 4 hab ich mittlerweile gelöst (TVheadend erlaubt usern nur zugriff in Abhängigkeit von er IP > User in skript muss von allen IPs berechtigt sein. Zudem war der grep falsch. Mit "<subscriptions>" funktioniert es besser.


    Bei 1) bin ich mir ziemlich sicher das, es ein ähnliches Problem ist (werd ich mir heute nachmittag ansehen).


    Muss ich für who entware-ng installieren?

    Hab es mal im Hintergrund laufen lassen:


    Aus dem Log:


    1)


    Code
    1. if [ $( ping -c1 $i | grep "received" | awk -F ',' '{print $2}' | awk '{print $1}' ) -eq 0 ]; then



    Gibt folgende Fehlermeldung:



    Code
    1. /share/CACHEDEV1_DATA/Recordings/Test.sh: line 68: [: -eq: unary operator expected2016-09-08 20:24:02.166

    2)


    Code
    1. if [ $(curl -s --user $tvh_login:$tvh_password http://127.0.0.1:9981/status.xml | grep "subscriptions" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}') -ne 0 -a $shutdown_timer -eq 0 ]; then

    Gibt folgende Fehlermeldung:


    Code
    1. /share/CACHEDEV1_DATA/Recordings/Test.sh: line 75: [: too many arguments

    3)

    Code
    1. if [ $(who | wc -l) -ne 0 ]; then

    Gibt folgende Fehlermeldung:


    Code
    1. share/CACHEDEV1_DATA/Recordings/Test.sh: line 89: who: command not found

    4)


    Code
    1. if [ $(curl -s --user $tvh_login:$tvh_password http://127.0.0.1:9981/status.xml | grep "subscriptions" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}') -eq 0 ];

    Gibt folgend Fehlermeldung


    Code
    1. share/CACHEDEV1_DATA/Recordings/Test.sh: line 93: [: -eq: unary operator expected

    Kann damit wer was anfangen?

    ok, dann wird ich morgen mal einen test starten.


    Da hab ich noch eine Frage: Bleibt des Skript im Hintergrund aktiv wenn ich es mit bash ausführe und dann die Konsole schließe?


    Ich wird mir morgen noch ein paar Sinnvolle Stellen für logging überlegen...

    '!/bin/sh


    War mal die Lösung, gemeinsam mit einer End of Line Konversion.


    Jetzt läuft


    Bash - n Debug.sh


    Ohne fehler durch.


    Neues Problem:


    Ich bekomme einen Fehler für netstat:


    for i in $(echo $(netstat -n | grep -i "ESTABLISHED" | grep "$tvh_ip:$port_no" | awk -F ':' '{print ":"$2}' | sed 's/:'$port_no'\|[ ]//g')); do


    Fehlermeldung:


    Code
    1. netstat: no support for `AF INET6 (tcp)' on this system.
    2. netstat: no support for `AF INET6 (udp)' on this system.
    3. netstat: no support for `AF INET6 (raw)' on this system.


    Damit kann ich ersmal nichts anfangen...

    Ich hab mal ein paar Zeilenschaltungen weggenommen


    Jetzt bekomm ich folgenden Fehler:


    Debug.sh: line 105: syntax error: unexpected end of file

    Hab das Leerzeichen vor dem Echo rausgemacht, sowie auch noch das vor dem do.


    Fehlermeldung ändert sich nicht wirklich:


    ebug.sh: line 47: syntax error near unexpected token `do'
    Debug.sh: line 47: ` for i in $(echo "${port_numbers}");do'


    mit Leerzeichen vor dem do


    ebug.sh: line 47: syntax error near unexpected token `do'
    Debug.sh: line 47: ` for i in $(echo "${port_numbers[*]}"); do'

    Hi!


    Ich hab im Internet ein nettes Script gefunden, dass meine Qnap 253 pro entsprechend der programmierten Aufnahmen automatisch hoch und runterfahren soll.


    https://tvheadend.org/boards/4/topics/15826


    (Es ist das 2. Script)


    Leider funktioniert das Script nicht auf meiner Qnap:



    Shell-Script
    1. #!/bin/bash# BASIC SETTINGS change at wish# Settings you have to look at# TvHeadend login and passwordtvh_login=YOUR_LOGIN_NAMEtvh_password=YOUR_PASSWORD# (post recording) process activity to be checked, leave blank to deactivateprocess_check=(PROCESS_A PROCESS_B)# Settings you might look at# portnumbers to be checked for user activity (tvheadend 9981 + 9982 and samba 445)port_numbers=(9981 9982 445)# minimum time in seconds needed for consecutive shutdown AND startupsafe_margin_shutdown=600# minimum time in seconds needed to start up the computer properlysafe_margin_startup=180# minimum time in minutes not to shutdown after last user activity (watching tv/recording, up-/downloading files, booting the system)idle_time_shutdown=30# maximum time in hours not to wake up for updating EPGepg_hours=48# interval in seconds the script will check if the system should be shutdownscript_int=60# END OF BASIC SETTINGS keep out from here ;-)# retrieve IP_address tvheadend servertvh_ip=$(hostname -i | awk '{print $1}')# set languageexport LANG=C# set session startuptime_boot_sec=$(cat /proc/uptime | awk -F ' ' '{print$1}' | awk -F '.' '{print$1}')boot_time=$(($(date +%s)-uptime_boot_sec))# initial values do not changerecording=1# check for shutdownuntil [ $recording -eq 0 ];do# initial values do not changerecording=0shutdown_timer=$idle_time_shutdownping_array=()# countdown to shutdownuntil [ $shutdown_timer -eq 0 ];doshutdown_timer=$((shutdown_timer-1))# check for server connection tvheadend samba or any other server according to settings abovestatus_netstat=1until [ $status_netstat -eq 0 ];dostatus_netstat=0sleep $script_intfor i in $( echo "${port_numbers}"); doport_no=$ifor i in $(echo $(netstat -n | grep -i "ESTABLISHED" | grep "$tvh_ip:$port_no" | awk -F ':' '{print ":"$2}' | sed 's/:'$port_no'\|[ ]//g')); doshutdown_timer=$idle_time_shutdownstatus_netstat=1ping_array[$(echo "${#ping_array}")]=$idonedoneping_array=($(echo "${ping_array}" | sed 's/[ ]/\n/g' | awk '!a[$0]++' ))donefor i in $(echo "${ping_array}"); doif [ $( ping -c1 $i | grep "received" | awk -F ',' '{print $2}' | awk '{print $1}' ) -eq 0 ]; thenping_array=($(echo "${ping_array/$i/}"))fidoneif [ $(echo "${#ping_array}") -eq 0 -a $boot_time -lt $(($(date +%s)-idle_time_shutdown*60)) ]; thenshutdown_timer=0fiif [ $(curl -s --user $tvh_login:$tvh_password http://127.0.0.1:9981/status.xml | grep "subscriptions" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}') -ne 0 -a $shutdown_timer -eq 0 ]; thenshutdown_timer=1fidone# check for active post recording processestotal_processes=0for i in $( echo "${process_check}"); docounter=$( ps -A | grep "$i" | wc -l )total_processes=$((total_processes+counter))doneif [ $total_processes -ne 0 ]; thenrecording=$((recording+1))fi# check for active usersif [ $(who | wc -l) -ne 0 ]; thenrecording=$((recording+1))fi# retrieve and calculate wake up dataif [ $(curl -s --user $tvh_login:$tvh_password http://127.0.0.1:9981/status.xml | grep "subscriptions" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}') -eq 0 ]; thenwake_after_min=$((epg_hours*60))if [ $(curl -s --user $tvh_login:$tvh_password 127.0.0.1:9981/status.xml | grep "next" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}' | wc -l) -gt 0 ]; thenwake_after_min_temp=$(curl -s --user $tvh_login:$tvh_password 127.0.0.1:9981/status.xml | grep "next" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}')if [ $wake_after_min -gt $wake_after_min_temp ]; thenwake_after_min=$wake_after_min_tempfifielsewake_after_min=0fiwake_after_secs=$((wake_after_min*60))# check safe margin shutdownif [ $safe_margin_shutdown -gt $wake_after_secs ]; thenrecording=$((recording+1))fidone# set RTC wake up timestop_date=$(date +%s)wake_date=$((stop_date+wake_after_secs-safe_margin_startup))echo 0 > /sys/class/rtc/rtc0/wakealarmecho $wake_date > /sys/class/rtc/rtc0/wakealarm# shutdown computersudo shutdown -h now


    Aktuell hänge ich bei Zeile 46


    Da wird mir ein Syntax Error ausgegeben.


    Bin leider ein Linux Neuling. Kann mir jemand helfen das zu fixen? - Ich denke an dem Code hätte mehr Leute interesse.


    Danke und LG