Нам нужно сделать грубую резервную копию на одном из наших Mac - нам нужно копировать файлы с него на наш файловый сервер Windows один раз в день, независимо от того, вошел ли кто-то в систему или нет. Я могу найти сценарии, которые делают это, когда пользователь вошел в систему, а общий ресурс Windows смонтирован, но я не могу понять, как это сделать, когда они не вошли в систему.
Есть ли какой-нибудь фанат unix / osx, который знает, как это сделать?
Чтобы запустить демон, который запускается независимо от того, вошел ли у вас пользователь или нет, вам нужно посмотреть на launchd для управления сценарием, который фактически будет выполнять резервное копирование. Начиная с Mac OS X 10.4 cron был заменен программой под названием запуск (страница руководства), который объединяет cron, init.d, rc и пару других утилит в одну программу.
Для справки: launchd запускает агенты запуска (запускаются от имени пользователя, когда пользователь входит в систему) и демоны запуска (запускаются независимо от того, когда пользователь вошел в систему). Эти задачи определяются файлами xml .plist, которые можно найти в одном из следующих мест:
/System/Library/LaunchDaemons
(системные задачи - не изменять),
/Library/LaunchAgents
(компьютерные задачи, которые запускаются, когда любой пользователь входит в систему),
/Library/LaunchDaemons
(задачи на компьютере, которые выполняются независимо от того, кто вошел в систему),
~/Library/LaunchAgents
(пользовательские задачи, которые выполняются, когда этот пользователь входит в систему).
Более подробную информацию о загрузке, разгрузке и т.д. можно найти на странице руководства.
Самый простой способ, который я нашел, - это создать сценарий оболочки для запуска резервного копирования.
Затем вы можете загрузить его и запустить, поместив следующий файл .plist в /Library/LaunchDaemons
а затем запустить sudo launchctl load -w /Library/LaunchDaemons/org.example.script.plist
загрузить его запустить.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.example.script</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/PATH/TO/BACKUP/script.sh</string>
</array>
<key>RunAtLoad</key>
<false/>
<!-- This runs the script every day at 2AM -->
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>
Кроме того, если вы хотите редактировать или создавать списки запуска, я бы рекомендовал поискать Лингон графический интерфейс для редактирования и создания таких файлов .plist.
Действительно простой сценарий резервного копирования может включать в себя следующие элементы:
1) Монтирование общего файлового ресурса Windows:
например.
mkdir /tmp/MountLocation
mount -t smbfs //domain;user:password@server/sharepath /tmp/MountLocation
2) Используйте rsync для резервного копирования файлов.
3) Размонтируйте общие файлы Windows, когда закончите:
например.
if [`umount /tmp/MountLocation`]
then
rmdir /tmp/MountLocation
fi
Подробнее о mount -t smbfs
можно найти на нем страница руководства или человек верхом.
С другой стороны, следует отметить, что в Tiger (10.4) StartCalendarInterval имеет довольно неприятную ошибку при работе со сном, которая с тех пор была исправлена в Leopard (10.5) и более поздних версиях.
Я настоятельно рекомендую проверить команду cron. Это позволяет вам планировать произвольные задачи командной строки в разное время с повторением.
Помимо cron, rsync также может быть полезен, если вы просто хотите сохранить текущую копию всех файлов. Вот как из форумов Ubuntu, где процесс описывается очень похоже на то, что вы делали бы в OS X. Вы можете сразу перейти к части, посвященной rsync, и команды aptitude для получения пакетов можно заменить fink или macports.
Инструкции, на мой взгляд, немного запутаны, но как только вы начнете, это не должно быть слишком сложно.
Вам нужно будет собрать сценарий, который создает точку монтирования, монтирует сервер Windows с помощью mount_smbfs в этой точке монтирования, копирует файлы и затем размонтирует сервер. Вам нужно будет решить, какое поведение вы хотите, если пользователь вошел в систему - вы, вероятно, не хотите, чтобы он пытался дважды смонтировать один и тот же общий ресурс. Вот несколько фрагментов сценария, который я использую для аналогичной задачи (кстати, красивое форматирование, которое превращает каждый комментарий bash в заголовок, команда O Server Fault):
если [-e / private / tmp / Volumes]; затем mkdir / private / tmp / Volumes / Terminal / else mkdir / private / tmp / Volumes / mkdir / private / tmp / Volumes / Terminal / fi
mount_smbfs //username:password@192.168.1.1/InterChk / private / tmp / Volumes / Terminal
если [ ! -e / private / tmp / Volumes / Terminal / ESXP]; затем выйдите из fi
если [-e /Library/WebServer/Documents/Sophos.old]; затем rm -r /Library/WebServer/Documents/Sophos.old fi
если [-e / Библиотека / WebServer / Documents / Sophos]; затем mv / Library / WebServer / Documents / Sophos /Library/WebServer/Documents/Sophos.old fi
mkdir / Библиотека / WebServer / Документы / Sophos
cp -Rp / private / tmp / Volumes / Terminal / ESXP / Library / WebServer / Documents / Sophos / ESXP cp -Rp / private / tmp / Volumes / Terminal / ES9x / Library / WebServer / Documents / Sophos / ES9x cp -Rp / private / tmp / Volumes / Terminal / ESOSX / Library / WebServer / Documents / Sophos / ESOSX cp -Rp / private / tmp / Volumes / Terminal / savlinux / Library / WebServer / Documents / Sophos / savlinux
chown -R _www / Библиотека / WebServer / Documents / Sophos
umount / частный / tmp / Volumes / Terminal /
rmdir / частный / tmp / Volumes / Terminal / `
Надеюсь, это поможет вам начать работу. Затем используйте cron или launchd, чтобы настроить tit на повторяющееся расписание, или, если хотите, вы можете настроить его как сценарий выхода, чтобы при выходе пользователя из системы автоматически выполнялось резервное копирование файлов.