dumbo
Goto Top

mailsync per unison - mac OS X (10.4)

moin,

ich hab mir überlegt wie man bei einer dezentralen mailarchitektur(pop - clients haben die mails lokal) ein zentrales mailbackup implementieren kann. Die Idee sieht wie folgt aus: wenn die kiste herunterfährt bzw. sich der user abmeldet wird ein script gestartet,
das erst das mailprogramm killt, dann synct und dann abmeldet bzw. herunterfährt.

-mailprogramm killen, weil er beim syncen, während die app. offen ist, den Vorgang abbricht

unter windows geht das recht einfach oder eben mit offlinefolders etc. ich möchte aber gerne EINE software für alle clients.
Beim Mac stoße ich auf folgende Probleme:

es gibt dort keine "tu-das-wenn-shutdown" Verknüpfung, wie z.B. die Startobjekte beim einloggen
Ergo müßte ich mir ein shutdown script schreiben, das erst die Applikationen killt, dann synct und dann shutdown -h now macht.
cronjob einrichten geht, aber:

1. kill -xyz geht nur per PID und nicht per Applikationsname, die PID ist aber immer anders - wie kann ich das lösen?
2. shutdown - h now geht nur per sudo(selbst als angemeldeter admin, da admin!=superuser), aber im Terminal bzw. der manpage finde ich keine Option das userpw gleich mit zu übergeben, es soll ja aber automatisch laufen

jemand eine Idee?

Content-Key: 54262

Url: https://administrator.de/contentid/54262

Printed on: April 18, 2024 at 00:04 o'clock

Mitglied: 46676
46676 Apr 11, 2007 at 23:27:07 (UTC)
Goto Top
Hallo,

also das kill nur mit der PID arbeitet ist ja nicht so schlimm ;)

#> kill -9 `ps aux | grep "/Applications/Mail.app/" | grep -v grep | awk -F " " {'print $2'}`

oder um erst einmal zu testen:
#> A=`ps aux | grep "/Applications/Mail.app/" | grep -v grep | awk -F " " {'print $2'}`; echo "Gesuchte PID: ${PID}."

Ansonsten kann man sich in der Variabel $PATH noch das Verzeichnis ~/bin hinzufügen. Das ~/ heisst Homeverzeichnis. /Users/<USERNAME>/bin ist also der gesammte Pfad. Hinzufügen des $PATH und andere Sachen die gleich noch kommen entweder Gobal für alle User in /etc/bashrc bzw. /etc/profile oder wenn es für einen oder meherere User nur machen möchte im Homeverzeichnis .bashrc bzw. .profile einfügen.
export PATH=${PATH}:~/bin
PATH sollte auch schon drin stehen, also einfach nur noch :~/bin anhängen. Verzeichnis dann noch erstellen, falls noch nicht vorhanden.

In diesem Verzeichnis legt man dann eigene Scripte und Programm. Jetzt kann man sich eine Datei in dem bin/ Verzeichnis erstellen.
am besten Programme -> Dienstprogramme -> Terminal

#> cd
#> cd bin
#> vi mailsync.sh

einmal i drücken und Code reinschreiben, bzw.:

#!/bin/bash

PIDMAILAPP=`ps aux | grep "/Applications/Mail.app/" | grep -v grep | awk -F " " {'print $2'}`;
kill -9 ${PIDMAILAPP}

. ~/bin/runsync.sh

exit

Das packt die PID vom gestarteten Mail.app in PIDMAILAPP, danach wird damit Mail.app mit kill -9 abgeschossen. So würde es gehen. Ich würde es aber auf keinen Fall so machen. Einstellungen die in der Zeit gemacht wurden, sind weg. Ausserdem besteht die Gefahr, das in dem Moment eine Datei (Config, Mailbox, Mailboxindex) von Mail.app gerade geschrieben wird. Wenn ein kill dann allles abbricht ist das dann auch das schreiben der Datei was mit abbricht. Datenverlust ist das Ergebnis.

Wenn ich das richtig verstanden habe, willst du nach dem Beenden von Mail.app eine Sicherung durchführen. Da würde ich dann auch das ~/bin Verzeichnis benutzen und dafür 2-3 Scripte anlegen. Ich nenne es jetzt auch wieder runsync.command und das für Mail.app runmail.command.

das Script runmail.command enthält einfach nur:
#!/bin/bash
/Applications/Mail.app/Contents/MacOS/Mail
~/bin/runsync.command

Das Script syncmail.command enhält:
#!/bin/bash
echo "Okay Mail ist weg und ich mach mal eben Backup..."
  1. backupprogrammaufruf ....
  2. scripte usw. selber einfuegen.

runsync.command könnte man ja auch in einer Datei mit runmail.command machen. Ich würde es ggf. lieber getrennt machen, da der aufruf von runsync ja später auch mal Parameter entgegen nehmen könnte. So würden dann Verscheidene Programme gestartet und rufen runsync.command anschliessend auf und geben als Parameter dann Informationen mit, durch die dann runsync weiss wass zu sichern ist. Da noch Variabeln für Pfade, Username, Homeverzeichnis, Backupdevice usw. zupacken bzw. Umgebungsvariabeln rein und man kann es Gobal ablegen und auch für zig Benutzer auch Pflegen, sprich Änderungen schnell für alle User machen.

An den Files hängt nicht wie überlich bei Bash/Shell Scripten ein .sh sondern .command, weil man diese dann anklicken kann und OS X fürt diese dann im Terminal aus.
Können dann auch per Link auf dem Desktop aufgerufen werden, oder im Dock liegend.

Es gibt viele Möglichkeiten Backups zu machen und Programme zu beeinflussen. Einfach mal Mail.app im Terminal starten mit:
#> /Applications/Mail.app/Contents/MacOS/Mail &

Wenn Mail auf ist im Terminal strg+z drücken. Dann versuchen mit Alt+Tab in Mail zu wechseln face-smile Mail ist in diesem Moment dann gestoppt, Mail macht dann gar nichts.
Dies könnte ähnlich von externen Programmen benutzt werden. Beispiel ein Programm welches den Screenserver Status überprüft, die Systemlast oder die Uhrzeit.
Wenn der Status des gewünschten Programms passt, dann wird Mail eingefroren und Backup startet.

Aber vll. guckt man sich auch einfach mal in den Systemeinstellungen um. OS-X kann selber den Rechner Starten. Wieso nicht einfach den Rechner um 3 Uhr Nachts starten lassen und dann das Backupscript beim Login aufrufen. Wenn das Backup fertig ist wird der Rechner wieder heruntergefahren.

Psst. Systemsteuerung -> Einergiesparen und da mal auf Zeitplan, in dem Fenster mal oben gucken ;)

Die Scripte kann man natürlich auch mal testen, damit ist sehr viel Möglich und es geht immer irgendwie über 1000 mögliche Wege in den *Unix/BSD Shells :D

cya
Member: dumbo
dumbo Apr 17, 2007 at 13:49:02 (UTC)
Goto Top
öhm.. ;=)

deine Vorschläge durchzugehen wird einen Moment in Anspruch nehmen, ist aber sehr anregend.

Vielen Dank.
Member: dumbo
dumbo Sep 06, 2007 at 12:07:13 (UTC)
Goto Top
läuft nun als Mischscript, per applescript, welches die tasks killt (so offen) und
danach per rsync, die relevanten Daten backuped