我一直在琢磨一些持久的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
。
我做了什么错我的crontab
configuration?
任何帮助将不胜感激!
我有同样的想法和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
中设置它