Mac OS X 按计划静默更新软件,必要时强制重启

Mac OS X 按计划静默更新软件,必要时强制重启

我负责管理一个以 PC 为主的网络上大约 40 台 Mac OS X 电脑。这些系统运行的 Mac OS X 10.5 和 10.6 版本大致相同。

我们正在制定一项新政策,每周强制所有机器安装操作系统和软件补丁。我们有一些系统管理软件,可以让 PC 轻松完成这项工作,但我对 Mac 的解决方案却一无所知。以下是我希望发生的事情:

每个星期五晚上 9 点左右,所有 Mac 都应访问 Apple 的软件更新服务器,下载所有补丁,并在必要时重新启动。此操作应按计划自动进行,无需任何用户或管理员交互。

我们没有 Mac OS X Server,而且可能在一段时间内都无法购买。不过我有最新版本的 Apple Remote Desktop。

任何帮助,将不胜感激。

答案1

斯科特的回答基本上是正确的,但更好的方法是以下命令(参见softwareupdate手册页了解详细信息):

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

添加--schedule off将阻止机器在其余时间检查和通知用户新的更新。如果完成并且没有错误,&& /sbin/reboot将重新启动机器。softwareupdate

此外,我强烈建议从 运行此程序,launchd唯一的原因是如果机器在应该启动时处于睡眠状态,则它将在机器被唤醒后立即运行。如果机器关闭,它仍然不会启动工作,但它至少比 更智能一点cron

示例launchdplist 文件如下(请参阅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>

该命令将被放入上述 plist 调用的bash脚本 (Apple Software Update Reboot) 中,如下所示:/usr/local/sbin/asu_rebootlaunchd

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

有了这两项(脚本bashlaunchdplist),您可以运行以下命令来加载作业(或重新启动机器,它将自动加载):

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

答案2

除非你陷入类似木偶那么我认为你运气不好,直到你可以买到一份OSX 服务器抱歉。不过,当你得到它时,你会爱上它,它会满足你的要求。

答案3

您可以在 root 用户的 crontab 中添加一个 cron 条目来执行此操作。该条目类似于:

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

为了编辑 root 用户的 crontab,您需要运行以下命令: sudo crontab -e

我不是 100% 赞同这个解决方案,因为我们使用拉德明德管理我们的补丁,这个概念让我有点害怕。

相关内容