Hook für IMAP Komandos

Status
Für weitere Antworten geschlossen.

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
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
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
expr war vorher nicht verlinkt. Das hast du auch nicht angegeben, dass es zu verlinken ist. Ist das vielleicht der Fehler?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
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?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Nein da gibts nen Fehler und in der Kommandozeile läuft "not found"
Das Script kann also noch nicht mal ausgeführt werden
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@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
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
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?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@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
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@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?
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
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!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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 ;)
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Bei unserem Glück, nein. Aber ich hoffe das Beste!
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Also hier ein kleiner Erfahrungsbericht:

Abruf läuft, Hibernation nicht. :mad:
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
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!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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