我一直在摒弃一些持久的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
但是当我在终端输入/bin/sh
以打开sh
并输入brew update
时,它会更新Homebrew
。
我的crontab
配置出了什么问题?
任何帮助将不胜感激!
答案 0 :(得分:19)
Cron没有定义PATH,请确保始终使用完整路径调用命令,这可能是/usr/local/bin/brew update
这被认为是防止意外/意外命令运行的良好做法。如果有人在你的路径中的某个地方放置一个名为'brew'的恶意脚本,但在/ usr / local / bin之前,它会被调用。
答案 1 :(得分:6)
我有同样的想法,而cronjob是一个不错的选择。但是,我发现了一个脚本,如果Mac上安装了新版本的公式,它将通知您。我不希望它自动发生。
http://chrisstreeter.com/archive/2012/08/homebrew-package-update-notifications-on-mountain-lion.html
我将脚本扩展为不在通知程序中显示固定公式:https://gist.github.com/SimonSimCity/13832e2e03597a6be793
在编写cron作业时,我决定选择一个launchd-agent,因为如果以后启动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
,或者也可以将其包含在脚本中;)
答案 2 :(得分:0)
您的bash
配置可能有问题。请务必设置PATH
,使其包含brew
所在的目录。您可以在~/.profile
中设置该目录,但要确保它也设置在~/.bashrc
中。或者,您可以按照设置crontab
MAILTO
中进行设置
答案 3 :(得分:0)