Шпаргалка по Zimbra
Основные команды
Вообще все выполняется от пользователя zimbra!!!
т.е. сперва всегда su - zimbra
Запуск/перезапуск
zmcontrol start|stop|restart|status
Перезапуск postfix (например, если правили конфиг)
zmmtactl reload
или
postfix reload
Информация о почтовом ящике
zmprov getMailboxInfo sharre@diamondplatinumrealty.com
Переиндексировать ящик
zmprov reIndexMailbox valynkin .pavel@propertyminder.com start|status|stop
Посчитать количество писем в Inbox (getAllFolders)
zmmailbox -z -m system@propertyminder.com gaf | grep Inbox | awk '{print $4}'
Если в логах сообщения со словами NO_SUCH_BLOB
то это значит, что произошло рассогласование между метаданными ящика и физическими файлами с письмами. Ну т.е. в метаданных есть ссылки на письма, а по факту файлов уже нет. Устраняется путем перестроения метаданных на основе существующих файлов с письмами в ящике.
Для того, что бы найти ящики, у которых проблема:
grep -B2 NO_SUCH_BLOB /opt/zimbra/log/mailbox.lo* |grep mailbox= |sed -r 's/.*mailbox=([0-9]*).*$/\1/' |sort -u
Пофиксить:
zmblobchk --mailboxes 6919 --export-dir /tmp --missing-blob-delete-item start|status|stop zmblobchk --mailboxes 4600 --export-dir /tmp/3 --missing-blob-delete-item --unexpected-blob-list /tmp/3/blob-list start
Работа с аккаунтом galsync
Информация об источниках данных (getDataSources)
zmprov gds galsync@vpstest.ru
Удалить аккаунт galsync
zmgsautil deleteAccount -a galsync@vpstest.ru
Узнать аккаунт (user account) по номеру ящика (MailboxId)
su - zimbra mysql use zimbra; select comment from mailbox where id=257; +----------------------+ | comment | +----------------------+ | user@domain.com | +----------------------+ 1 row in set (0.00 sec)
Апдейт правил spamassasin
zimbramon /bin/sa-update
Очистка ящиков от удаленных писем
Зимбра производит операцию purge_mailbox только для тех ящиков, которые находятся в момент выполнения операции в памяти (т.е. к ним кто то законнечен). По этому для редко используемых ящиков очистка не срабатвает. В ручном режиме:
Получаем ZimbraID ящика
zmprov -l ga letterbackup@propertyminder.com zimbraId
Загружаем ящик в память выполнив пустую операцию
zmmailbox -z -m letterbackup@propertyminder.com noOp
Очищаем ящик
zmsoap -v -z PurgeMessagesRequest/mbox @id=1ab5cf73-b393-4ae0-9723-05ee92131980
вот так:
[zimbra@mail ~]$ zmprov -l ga letterbackup@propertyminder.com zimbraId # name letterbackup@propertyminder.com zimbraId: 1ab5cf73-b393-4ae0-9723-05ee92131980 [zimbra@mail ~]$ zmmailbox -z -m letterbackup@propertyminder.com noOp [zimbra@mail ~]$ zmsoap -v -z PurgeMessagesRequest/mbox @id=1ab5cf73-b393-4ae0-9723-05ee92131980 <PurgeMessagesRequest xmlns="urn:zimbraAdmin"> <mbox id="1ab5cf73-b393-4ae0-9723-05ee92131980"/> </PurgeMessagesRequest> <PurgeMessagesResponse xmlns="urn:zimbraAdmin"> <mbox id="1ab5cf73-b393-4ae0-9723-05ee92131980" mbxid="6867" s="3030290"/> </PurgeMessagesResponse>
Можно пройтись по всем ящикам вот таким скриптом purge-all.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #!/bin/bash # purge-all.sh # run as user zimbra # $ ./purge-all.sh # or crontab monthly/weekly # 0 1 1 * * /usr/local/bin/purge-all.sh # config TMPDIR="/var/tmp" LOGDIR="/opt/zimbra/log" SLEEP=10 if [ "$USER" != "zimbra" ]; then echo "Error: Must be run as user zimbra" exit 1 fi DATE="`date '+%Y%m%d-%H%M%S'`" exec >> $LOGDIR/purgeall-$DATE.log echo "`date`: START $0" zmprov -l gaa -s `zmhostname` > $TMPDIR/purgeall-list.out for MYUSER in `cat $TMPDIR/purgeall-list.out` do echo "`date`: Starting user: $MYUSER" ACCOUNT_ID="`zmprov -l ga $MYUSER zimbraId | awk '/^zimbraId:/ {print $2}'`" if [ -n "$ACCOUNT_ID" ]; then zmmailbox -z -m $MYUSER noOp && \ zmsoap -v -z PurgeMessagesRequest/mbox @id=$ACCOUNT_ID if [ $? = 0 ]; then echo "`date`: Finished user: $MYUSER" else echo "`date`: Error: $MYUSER" fi fi sleep $SLEEP done echo "`date`: END $0" exit 0 |
ENJOY!