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

Автоматическое обновление программного обеспечения Mac OS X по расписанию с принудительной перезагрузкой при необходимости

Я отвечаю за около 40 компьютеров Mac OS X в сети, в основном состоящей из ПК. Системы работают под управлением Mac OS X 10.5 и 10.6 примерно в равной степени.

Мы вводим новую политику еженедельного принудительного обновления ОС и программного обеспечения на всех машинах. У нас есть программное обеспечение для управления системой, которое упрощает эту задачу для ПК, но я немного затрудняюсь найти отличное решение для Mac. Вот чего я хочу:

Каждую пятницу примерно в 21:00 все Mac должны выходить на сервер обновления программного обеспечения Apple, загружать каждый патч и при необходимости перезагружаться. Это должно происходить автоматически и по расписанию без вмешательства пользователя или администратора.

У нас нет Mac OS X Server, и покупка его, вероятно, не будет вариантом в ближайшее время. Однако у меня есть последняя версия Apple Remote Desktop.

Любая помощь будет оценена.

Ответ Скотта по сути правильный, но лучшим методом будет следующая команда (см. softwareupdate страница руководства для полной информации):

/usr/sbin/softwareupdate --install --all --schedule off && /sbin/reboot

Добавление --schedule off будет препятствовать тому, чтобы машина проверяла и уведомляла пользователя о новых обновлениях в остальное время. && /sbin/reboot перезапустит машину, если softwareupdate закончил без ошибок.

Кроме того, я настоятельно рекомендую запускать это из launchd по той единственной причине, что если машина спит в то время, когда она должна сработать, она будет запущена, как только машина проснется. Он все равно не сработает, если машина выключена, но он, по крайней мере, немного умнее, чем cron.

Пример launchd plist выглядит следующим образом (см. launchd.plist страница руководства для получения дополнительной информации) и должны быть сохранены в /Library/LaunchDaemons/ как что-то вроде tld.domain.asu_reboot.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>tld.domain.softwareupdate</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/sbin/asu_reboot</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>21</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>
    </dict>
</plist>

И команда будет помещена в bash сценарий в /usr/local/sbin/asu_reboot (Перезагрузка обновления программного обеспечения Apple), вызываемая указанным выше launchd plist, вот так:

#!/bin/bash
/usr/sbin/softwareupdate --install --all --schedule off && /sbin/reboot

С этими двумя элементами ( bash сценарий и launchd plist), вы должны запустить следующую команду, чтобы загрузить задание (или перезагрузите компьютер, и он загрузится автоматически):

sudo launchctl load -w /Library/LaunchDaemons/tld.domain.asu_reboot.plist

Вы можете добавить запись cron в crontab пользователя root, которая будет делать это. Запись будет примерно такой:

0 19 * * 5 /usr/bin/softwareupdate --install --all

Чтобы отредактировать crontab пользователя root, вам нужно будет выполнить следующую команду: sudo crontab -e

Я не на 100% поддерживаю это решение, потому что мы используем РАДМИНД управлять нашими патчами, и эта концепция меня немного пугает.

Если вы не попадете в нечто вроде Кукольный тогда, я думаю, вам не повезло, пока вы не купите копию Сервер OSX Прости. Тем не менее, когда вы его получите, он вам понравится, он будет делать то, что вы хотите.