Назад | Перейти на главную страницу

скрипт для копирования файлов без входа на Mac

Нам нужно сделать грубую резервную копию на одном из наших 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

  • Теперь установите туда компьютер Sophos.

mount_smbfs //username:password@192.168.1.1/InterChk / private / tmp / Volumes / Terminal

  • Если смонтировать не удалось - залог!

если [ ! -e / private / tmp / Volumes / Terminal / ESXP]; затем выйдите из fi

  • Удалите старые папки Sophos, прежде чем создавать резервную копию текущей.

если [-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

  • И скопируйте последние CID

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 на повторяющееся расписание, или, если хотите, вы можете настроить его как сценарий выхода, чтобы при выходе пользователя из системы автоматически выполнялось резервное копирование файлов.