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

Ian*_*hao 12 linux macos bash cron crontab

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

例如,我想Homebrew在晚上11点更新我的日常生活.我做的是,sudo crontab -u user -ecrontab在Vim 打开了.我将以下命令放入其中,进行更新homebrew并向我发送电子邮件.

这是代码:

MAILTO=myemail@foo.com
* 23 * * * brew update
Run Code Online (Sandbox Code Playgroud)

我保存它等待魔法发生.它说,而不是在我收到的电子邮件中排除这个命令/bin/sh: brew : command not found

但是当我键入/bin/sh终端打开sh并输入brew update它会更新Homebrew.

我的crontab配置出了什么问题?

任何帮助将不胜感激!

Don*_*van 20

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

这被认为是防止意外/意外命令运行的良好做法.如果有人在你的路径中的某个地方放置一个名为'brew'的恶意脚本,但在/ usr/local/bin之前,它会被调用.


Sim*_*ity 9

我有同样的想法,而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>
Run Code Online (Sandbox Code Playgroud)

恭喜!现在,如果有新的更新,您将收到通知.brew upgrade如果您觉得过时,只需打电话,或者也可以将其包含在脚本中;)