Hook für IMAP Komandos

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@jahlives

Ich habe es gerade probiert:

1. Versuch: Ändern der Werte auf 10800 und sleep 1, DS legt sich nicht schlafen
2. Versuch: Script deaktiviert: DS legt sich schlafen.

Es muß irgendwas in den Script sein, dass die Platte wach hält.
Die drei einzig möglichen Kandiaten um das Schlafen zu unterbrechen wären, dann ps, sleep und expr.
Du könntest mal probieren diese drei Befehle nach /tmp zu kopieren und die dann direkt von /tmp aufzurufen. /tmp ist ein RAM Verzeichnis und damit werden Daten dort drin aus dem Speicher geholt und nicht von der Platte
Ich kann das bei mir schlecht testen, denn meine Platten schlafen nie
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Könntest du mir das nochmals ein wenig genauer erklären?
Was muß ich wie kopieren? Ich bin ein Klicki-Bunti-Geschädigter! :mad::rolleyes:
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@jahlives
Habe ich es richtig gemacht und

Rich (BBCode):
s=`ps | grep imap | grep -v "imap-login" | grep -v "grep imap"`
 if [ "$s" != '' ]; then
  i=0
  $pfad_getmail &> /dev/null
in die /tmp/checkmail kopiert?

Oder wie muß ich das angehen?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
So bin jetzt zu Hause und vor dem Compi. Habe mir das mal angeschaut und folgendes gesehen: Alle fraglichen Kommandos (echo, grep, ps, sleep und touch) sind nur Links auf busybox. Also müsstest du zuerst /bin/busybox nach /tmp kopieren (cp /bin/busybox /tmp/). Dann musst du in /tmp Links anlegen, die auf busybox zeigen
Code:
ln -s /tmp/busybox /tmp/ps
ln -s /tmp/busybox /tmp/grep
ln -s /tmp/busybox /tmp/echo
ln -s /tmp/busybox /tmp/sleep
ln -s /tmp/busybox /tmp/touch
Danach kannst du im Quellcode alle Vorkommen der jeweiligen Funktionen mit dem Pfad nach /tmp angeben, also z.B.
Code:
s=`/tmp/ps | /tmp/grep imap | /tmp/grep -v ... `
Alternativ müsste eigentlich auch folgendes gehen: Im Quellcode direkt als 2. Zeile (unmittelbar nach #!/opt/bin/bash) den PATH auf /tmp setzen. Damit wird die PATH Variable NUR für den Kontext des Scriptes neugesetzt. Dann müsstest du im Quelltext nicht /tmp/grep angeben, sondern könntest es bei grep belassen
Code:
PATH=$PATH:/tmp
Da dies nur im Kontext der Scriptes gültig ist, sollten andere Scripts die originalen Kommandos im "echten" PATH immer noch finden.

Würde mich über eine Rückmeldung deinerseits und eine allfällige Erfolgsmeldung freuen. Dann würde ich das noch in mein Script aufnehmen. Da ich den sleep der Platten aber nicht testen kann würde ich das erst nach erfolgter Rückmeldung übernehmen.

Gruss

tobi
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
tobi,
vielen Dank ich melde mich, wenn ich das probiert habe! Du bist mein Retter ;)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
tobi, du hast Recht, nicht den tag vor dem Abend loben.
Es hat nicht geklappt.

Habe deinen Alternativvorschlag bevolgt und einfach die Zeile ins script gesetzt.

Rich (BBCode):
PATH=$PATH:/tmp

Leider schläft die DS nicht ein.

Kann es was damit zu tun haben, dass mein Script in "/volume1/homes/User/" liegt?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das Script selber sollte imho eigentlich in den Speicher geladen und von dort ausgeführt werden.
Das einzige wie ich mir das erklären könnte, wäre dass die Backticks bei s= selber ein Programm sind. Ich vermute die sind mit der verwendeten Shell verknüpft. Es könnte ggf helfen die verwendete Shell ebenfalls nach /tmp zu kopieren.
Dann müsste man wohl auch den Pfad zur Shell #! entsprechend anpassen.
@ein Linux Hacker
Rufen Backticks die verwendete Shell auf? Würde es gehen die verwendete Shell nach /tmp zu kopieren? Würden damit auch die Backticks die Shell in /tmp aufrufen?
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@jahlives

Könntest du mir ggf. sagen wie das geht?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Da wäre zuerstmal die Frage: Welche Shell verwendest du? Hast du dir mal via ipkg die bash installiert? Falls nein, dann wäre deine Shell wohl /bin/sh oder /bin/ash
Leg in /tmp wiederum einen Link auf busybox an
Code:
ln -s /tmp/busybox /tmp/sh
dann passt du in deinem Script die erste Zeile an und setzt
Code:
#!/tmp/sh
Dann probierst du es nochmal mit dem sleep
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@jahlives

den letzter Eintrag hat den Erfolg gebracht im Zusammenspiel mit

Rich (BBCode):
PATH=$PATH:/tmp

Danke!!!!!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Cool, dass es so klappt. Da habe ich auch wiedermal was gelernt :)
Ich habe meinen Code bei mir zu Hause mal entsprechend angepasst und lasse diese Version mal wieder ein Weilchen laufen.
 

nalemi1207

Benutzer
Mitglied seit
28. Jan 2010
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,
bin gerade wieder aus dem Urlaub zurück und sehe, dass der thread ne erstaunliche länge erreicht hat. Nur mal so zum Status:
- Script läuft bei mir wie gewünscht (über dovecot imap login)
- Über schlafen hab ich mir noch keine gedanken gemacht (frage muss ich dass in meinem szenario überhaupt, script läuft ja nur für ne gewisse Zeit wenn sich ein client angemeldet hat)
- Hab noch Probleme mit dem checkmail file (Stromausfall -> datei bleibt liegen -> script ist der meinung es läuft schon), ich dachte daher an was weniger persistentes: irgend eine geschickte aneinanderreihung von ps/grep befehlen unter benutzung meiner eigenen PID. Habt ihr da einen Vorschlag?

Bei Interesse kann ich mein script auch mal posten.
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@jahlives

Kommando zurück. Irgendwas scheint nicht zu klappen. Die Platte legt sich zwar schlafen aber irgendwie werden bei Anmeldung keine Mails abgerufen und in einem drei Stunden Rhytmus leider auch nicht.

Entweder liegt es daran, dass ich vergessen habe, gestern das Script zu aktivieren oder es läuft einfach nicht.

Muß das mal nachher prüfen, wenn ich wieder vorm eigenen PC sitze.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Meine gestrige Version des Code läuft bei mir einwandfrei. Wie gesagt kann ich den Sleep nicht testen, da meine Platten immer laufen. Aber eine 10:47 gesendete Email wird 10:48 abgeholt und in meine Mailbox gestellt.
@
nalemi
Ich würde dir empfehlen eine Meldung auszugeben wenn eine PID gefunden wird und die Ausführung abzubrechen. Weil dein Script auch wieder externe Programme aufruft (z.B. getmail). Von diesen externen Programmen weiss die PID nicht. Schiesst du also das Hauptskript einfach ab, könnte dir schlimmstenfalls getmail so abgeschossen werden, dass er eine Email im Nirvana verlieren könnte.
Da soll der admin schauen ob alle Komponenten beendet sind und das das PID file entfernen
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@jahlives

Werde das mal zu Hause testen. Es muß doch klappen
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Bin vor dem heimischen PC angekommen. Es sieht so aus, dass der die Mails abholt, aber die DS will nicht schlafen.
Hast du noch Ideen woran es liegen könnte?
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Ich habe gerade eine interessante Entdeckung gemacht (jedenfalls meine ich das) Ich habe meine DS neu gestartet. Die Links wurden aus dem /tmp Verzeichnis gelöscht. Das Script läuft aber immer noch.
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich habe gerade eine interessante Entdeckung gemacht (jedenfalls meine ich das) Ich habe meine DS neu gestartet. Die Links wurden aus dem /tmp Verzeichnis gelöscht. Das Script läuft aber immer noch.
/tmp ist ein Verzeichnis direkt im RAM. nach einem reboot sollten die Kommandos wieder gelöscht sein. Funzen tut es noch weil du den Pfad nicht komplett
Code:
PATH=/tmp
überschrieben, sondern
Code:
PATH=$PATH:/tmp
nur ergänzt hast. sprich das Script "findet" die Kommandos nicht in /tmp und holt sie damit wieder aus /bin und damit von der Festplatte.
Kannst du mir sonst mal deinen aktuellen Quellcode posten? Wie gesagt kann ich den Hibernate der Platten bei mir leider nicht testen. Gestern hast du aber geschrieben, dass es funzen würde...
 
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