如何在Mac OS上用Cron更新自制软件

我一直在琢磨一些持久的linux技术来帮助自动化我的日常工作。 我发现cron是非常强大的,如果我可以用它来检查我的系统上的一些软件包的更新。

例如,我想每天晚上11点更新我的Homebrew 。 我所做的是,用sudo crontab -u user -e ,我在Vim中打开了crontab 。 我把下面的命令放进去,为homebrew做更新并给我发电子邮件。

代码如下:

 MAILTO=myemail@foo.com * 23 * * * brew update 

我保存它等待魔术发生。 在接收到的电子邮件中,我/bin/sh: brew : command not found

但是当我在terminalinput/bin/sh来打开sh并inputbrew update它会更新Homebrew

我做了什么错我的crontabconfiguration?

任何帮助将不胜感激!

我有同样的想法和cronjob是一个很好的选择。 但是,我发现了一个脚本,如果安装在您的Mac上的公式的新版本可用,将会通知您。 我不希望它自动发生。

http://chrisstreeter.com/archive/2012/08/homebrew-package-update-notifications-on-mountain-lion.html

我将脚本扩展为不显示通知程序中的固定公式: https : //gist.github.com/SimonSimCity/13832e2e03597a6be793

当谈到编写cron作业时,我决定去推出一个launchd代理,因为如果以后启动Mac,这也会运行。 如果您的Mac已经在那个时候,Cron-jobs就会运行。

有关cronjob vs launchd的一些帮助,我建议阅读本文或类似的介绍: http : //alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs

这是我的配置。 如你所见,它每天早上10点和下午3点运行。 代理调用的脚本位于/usr/local/bin/homebrew-update-notifier

 <?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>EnableGlobbing</key> <false/> <key>Label</key> <string>homebrew.simonsimcity.update-notifier</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>/usr/local/bin/homebrew-update-notifier</string> </array> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/tmp/homebrew.simonsimcity.update-notifier.err</string> <key>StandardOutPath</key> <string>/tmp/homebrew.simonsimcity.update-notifier.out</string> <key>StartCalendarInterval</key> <array> <dict> <key>Hour</key> <integer>10</integer> <key>Minute</key> <integer>0</integer> </dict> <dict> <key>Hour</key> <integer>15</integer> <key>Minute</key> <integer>0</integer> </dict> </array> </dict> </plist> 

恭喜! 如果有新的更新可用,您将会收到通知。 如果您觉得过时,请直接调用brew upgrade ,或者将其添加到脚本中;)

Cron没有定义PATH,请确保始终使用完整路径调用命令,可能是/usr/local/bin/brew update

这被认为是保持不需要/意​​外的命令运行的良好实践。 如果有人在你的路径上放了一个名为'brew'的恶意脚本,但是在/ usr / local / bin之前,它会被调用。

你的bash配置可能有问题。 确保你设置了PATH ,使它包含brew所在的目录。你可以在~/.profile设置它,但是确保它也被设置在~/.bashrc 。 另外,你可以用你设置MAILTO方式在你的crontab中设置它