Hook für IMAP Komandos

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.
Ja tut mir leid. Es war schon später am Abend und ich habe gedacht, ich hätte das script aktiviert.
Hier der Quellcode:

Rich (BBCode):
#!/tmp/sh
PATH=$PATH:/tmp
pfad_getmail="/volume1/homes/User/getmail.sh"

if [ -e /tmp/checkmail ]; then
echo "Code rennt bereits"
  exit
  fi

  if [ "$(whoami)" = "root" ]; then
   exit
   fi

   if [ ! -e $pfad_getmail ]; then
    echo "$pfad_getmail konnte nicht gefunden werden"
     exit
     fi

     i=0
    touch /tmp/checkmail
    echo $$ > /tmp/checkmail
     while true; do
      s=`ps | grep imap | grep -v "imap-login" | grep -v "grep imap"`
       if [ "$s" != '' ]; then
         i=0
           $pfad_getmail &> /dev/null
            sleep 60
              else
                i=`expr $i + 1`
                 sleep 1
                    if [ `expr $i % 10800` -eq 0 ]; then
                       i=0
                          $pfad_getmail &> /dev/null
                            fi
                             fi
                             done
 
Du hast alle benötigten Dateien/Links nach /tmp kopiert? V.a. expr, ps, grep, sleep und sh müssen unter /tmp auf /tmp/busybox verlinkt sein. Nach einem Reboot sind die wieder weg
 
expr war vorher nicht verlinkt. Das hast du auch nicht angegeben, dass es zu verlinken ist. Ist das vielleicht der Fehler?
 
expr war vorher nicht verlinkt. Das hast du auch nicht angegeben, dass es zu verlinken ist. Ist das vielleicht der Fehler?
Dann habe ich es wohl im ursprünglichen Post übersehen. Könnte gut sein, dass dies die Platten geweckt hatte. Verlink expr auch mal in /tmp mit /tmp/busybox
 
Nein, ich habs gerade ausprobiert. Das war es auch anscheinend nicht.
Kann es was mit dem script zu tun haben, dass das von der Festplatte gestartet wird? Irgendwas muß es ja auslösen?
 
Nein, ich habs gerade ausprobiert. Das war es auch anscheinend nicht.
Du hast also die laufende Instanz des Scriptes beendet, die benötigten Dateien kopiert und dann das Script neugestartet?
Wenn ja, dann gehen mir so langsam auch die Ideen aus. Funzt denn das Mailabholen noch wenn du als PATH nur /tmp angibst?
Code:
PATH=/tmp
 
Nein da gibts nen Fehler und in der Kommandozeile läuft "not found"
Das Script kann also noch nicht mal ausgeführt werden
 
Nein da gibts nen Fehler und in der Kommandozeile läuft "not found"
Das Script kann also noch nicht mal ausgeführt werden
Und diese Meldung darf nicht sein. Sie besagt, dass das Script ein Kommando aufruft, das sich nicht in /tmp befindet. Also wird es von der Platte geholt und das weckt sie auf.
Poste mal den Inhalt von /tmp
Code:
ls -all /tmp
Irgendein Kommando hast du wohl vergessen
 
@Hawk
Habe das bei mir jetzt auch mal mit PATH=/tmp getestet. Ich kriege die gleichen Fehler wie du auch.
Problem: Die Klammern [ ] beziehen sich auf das Programm test und das liegt nicht im /tmp.
Leider reicht es nicht einfach einen Link in /tmp von /tmp/busybox auf /tmp/test zu erstellen. Du musst die [ Klammer entfernen und mit dem Programmaufruf ersetzen z.B.
Code:
[FONT=monospace]
[/FONT]if test "$s" != '' ; then
Also zusätzlich ln -s /tmp/busybox /tmp/test den Quellcode anpassen.
Bei mir läuft der Code so jetzt ohne Fehlermeldung mit PATH=/tmp
Zusätzlich musst du in deinem getmail.sh, den PATH wieder korrigieren. Sonst sucht dein getmail nur in /tmp (getmail.sh leitet den Pfad vom Elternscript ab, AUSSER er ist explizit gesetzt)
Also in deinem getmail.sh als zweite Zeile z.B.
Code:
PATH=/opt/bin:/opt/sbin:/opt/sbin:/opt/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin
Wenn so also der sleep der Platten nicht funzt weiss ich auch nicht mehr weiter
Ich habe die Mailabholung gerade getestet. Funzt einwandfrei
 
Muß ich nur diese einze Zeile im Script anpassen?

Dann muß ich in meine getmail.sh und dort die Zeile einfügen, die du mir geben hast?!

Ist das so richtig?
 
1. Du musst einen Link von /tmp/busybox nach /tmp/test erstellen
2. du musst in dem Code alle Vorkommen von [ code ] ersetzen (wie gezeigt mit test)
3. du musst PATH in deinem getmail.sh Script wieder geradebiegen, denn /tmp geht für getmail.sh nicht. Also PATH= und dann die Pfade aus meinem Post. Irgendwo am Anfang deines getmail.sh, ABER nicht vor der ersten Zeile die mit #! eigeleitet wird

Gruss

tobi

p.s. 4. Ich habe die aktuellste Version des Codes wieder in meinem svn. Das Script legt die nötigen Befehle unter /tmp an. Wichtig: Die Bemerkung zur Shell im Quellcode und der Hinweis PATH in Folgescripts wieder "geradezubiegen". Auch nicht vergessen den Pfad zu getmail.sh korrekt anzugeben
 
@jahlive
Guck dir einmal meinen Code an, die Kommandozeile sagt nun: 13: whoami: not found

Der Abruf klappt trotzdem

Rich (BBCode):
#!/tmp/sh
PATH=/tmp
pfad_getmail="/volume1/homes/Ronald/getmail.sh"

if test -e /tmp/checkmail ; then
echo "Code rennt bereits"
  exit
  fi

  if test "$(whoami)" = "root" ; then
  echo "Code darf NIEMALS unter root laufen. Das gibt Aerger mit Dovecot!"
   exit
   fi

   if test ! -e $pfad_getmail ; then
    echo "$pfad_getmail konnte nicht gefunden werden"
     exit
     fi

     i=0
    touch /tmp/checkmail
    echo $$ > /tmp/checkmail
     while true; do
      s=`ps | grep imap | grep -v "imap-login" | grep -v "grep imap"`
       if test "$s" != '' ; then
         i=0
           $pfad_getmail &> /dev/null 2>&1
            sleep 60
              else
                i=`expr $i + 1`
                 sleep 1
                    if test `expr $i % 10800` -eq 0 ; then
                       i=0
                          $pfad_getmail &> /dev/null 2>&1
                            fi
                             fi
                             done

Meine getmail.sh sieht so aus

Rich (BBCode):
#!/tmp/sh
PATH=/opt/bin:/opt/sbin:/opt/sbin:/opt/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/s
/opt/bin/getmail -q -d --rcfile /volume1/homes/User/.getmail/gmx.rc

Vorher habe ich alle Links so gesetzt:

Rich (BBCode):
cp -f /bin/busybox /tmp/ > /dev/null 2>&1
ln -s /tmp/busybox /tmp/grep > /dev/null 2>&1
ln -s /tmp/busybox /tmp/ps > /dev/null 2>&1
ln -s /tmp/busybox /tmp/sleep > /dev/null 2>&1
ln -s /tmp/busybox /tmp/expr > /dev/null 2>&1
ln -s /tmp/busybox /tmp/test > /dev/null 2>&1
ln -s /tmp/busybox /tmp/echo > /dev/null 2>&1
ln -s /tmp/busybox /tmp/touch > /dev/null 2>&1
 
@jahlive
Guck dir einmal meinen Code an, die Kommandozeile sagt nun: 13: whoami: not found

Der Abruf klappt trotzdem
Ups den whoami habe ich übersehen. Ah ich sehe gerade du setzt PATH weiter oben als ich. Ich habe PATH erst nach i=0 gesetzt. Drum hat die Shell den Befehl bei mir finden können. Sollte aber den Hibernate nicht verhindern, weil's nur einmal aufgerufen wird
In getmail.sh würde ich nicht auf die Shell in /tmp verweisen, sondern die "normale" Shell unter /bin/sh verwenden. Wenn getmail.sh aufgerufen wird, dann wachen die Platten mit Garantie eh auf, also kannst du auch gleich auf die Befehle auf der Platte zugreifen.
Btw: Bei deinem PATH= in deinem getmail.sh steht hinten schon noch mehr oder?
 
Wenn er whoami finden soll, muß ich auch wahrscheinlich einen Link setzen?
in der getmail folgt noch was! Ist irgendwie nicht mit in den Code gekommen!
 
Wenn er whoami finden soll, muß ich auch wahrscheinlich einen Link setzen?
in der getmail folgt noch was! Ist irgendwie nicht mit in den Code gekommen!
Entweder du setzt einen Link zwischen /tmp/busybox und /tmp/whoami oder du setzt PATH erst weiter unten (z.B. unmittelbar vor dem ersten i=0)
Würde mich wirklich wundernehmen ob deine Platten jetzt pennen gehen oder nicht ;)
 
Bei unserem Glück, nein. Aber ich hoffe das Beste!
 
Also hier ein kleiner Erfahrungsbericht:

Abruf läuft, Hibernation nicht. :mad:
 
Also hier ein kleiner Erfahrungsbericht:

Abruf läuft, Hibernation nicht. :mad:
Dann weiss ich auch nicht mehr weiter. Vermutlich benutzt busybox selber Files von der Festplatte und weckt diese damit auf
 
Da bleibt mir ja bald nichts anderes übrig, den guten Cronjob wieder zu aktivieren und meine Mails nur alle 3 Stunden abrufen zu lassen. Schade es wäre zu schön gewesen!
 
Hei Hawk

schau mal ins OffTopic Forum. Dort habe ich einen Thread aufgemacht zum Thema "Script komplett im RAM"
Dort wird auch das syno_hibernate_debug Tool genannt (ist ein Post von goetz). Kannst du das mal aktivieren, zuerst aber die Hibernate Zeit im DSM auf das Minumum setzen. Schiesse dann das Script ab und starte es neu. Nach der im DSM eingestellten Hibernate Zeit mal die Logs unter /var/log/messages anschauen (ggf hier posten).
Was auch noch ein Versuch sein könnte wäre es den sleep im Code (wenn kein Client verbunden ist) auf 11 Minuten (660s) einzustellen. Dann müssten die Platten nach 10min in den Hibernate gehen. Dann könnte man die Logs durchsuchen welcher Prozess den Hibernate beendet hat.
Es muss irgendwie gehen.
Btw: Welche DS und wieviel RAM hast du? Gib mal das Kommando free ein und schau wieviel RAM als frei angezeigt wird. itari hat im OffTopic Thread sehr treffend erläutert, dass man natürlich genügend freien RAM haben muss, um busybox, und damit alle Kommandos, komplett im Speicher zu halten. Wenn der RAM ausgeht und die DS beginnt Daten auszulagern, dann springen natürlich die Platten an!
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat