我负责管理一个以 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
。
示例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>
该命令将被放入上述 plist 调用的bash
脚本 (Apple Software Update Reboot) 中,如下所示:/usr/local/sbin/asu_reboot
launchd
#!/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
答案2
答案3
您可以在 root 用户的 crontab 中添加一个 cron 条目来执行此操作。该条目类似于:
0 19 * * 5 /usr/bin/softwareupdate --install --all
为了编辑 root 用户的 crontab,您需要运行以下命令:
sudo crontab -e
我不是 100% 赞同这个解决方案,因为我们使用拉德明德管理我们的补丁,这个概念让我有点害怕。