【问题标题】:how to update homebrew with Cron on Mac os如何在 Mac os 上使用 Cron 更新自制软件
【发布时间】:2013-12-29 23:10:46
【问题描述】:

我一直在寻找一些持久的 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 配置做错了什么?

任何帮助将不胜感激!

【问题讨论】:

  • 使用 crontab 在 Darwin 上似乎已被弃用(Mac OS X 基于 Darwin)。请改用launchd。这是众多快速教程之一:alvinalexander.com/mac-os-x/…
  • 不确定您是否想在第 11 个小时的每一分钟执行一次……您可能会在 11 到 12 点之间收到很多电子邮件
  • 只是为了添加@rjmoggach 的评论,OP 可能打算做00 23 * * * brew update

标签: linux macos bash cron crontab


【解决方案1】:

您的bash 配置可能有问题。确保设置PATH,使其包含brew 所在的目录。您可以在~/.profile 中设置它,但请确保它也在~/.bashrc 中设置。或者,您可以像设置 MAILTO 一样在 crontab 中设置它

【讨论】:

  • 查看 Ian 的问题,它说 cron 使用 /bin/sh 作为其 shell,而不是 bash
【解决方案2】:

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

这被认为是防止不需要/意​​外命令运行的好习惯。如果有人在您的路径中的其他位置放置了一个名为“brew”的恶意脚本,但在 /usr/local/bin 之前,它会被调用。

【讨论】:

  • 感谢@Donovan,这个成功了。现在我知道在哪里配置我的crontab。非常感谢
【解决方案3】:

cronjob 是一个不错的选择,但我不希望它自动发生。我找到了script,它会在您的 Mac 上安装的公式的新版本可用时通知您。

我扩展了 script 以不在通知程序中显示固定公式。

我决定为 cronjb 使用 launchd-agent,因为如果稍后启动 Mac,它也会运行。如果您的 mac 那时已经打开,则 Cron-jobs 才会运行。

对于 cronjob 与 launchd 的比较,我推荐阅读this

这是我每天上午 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,或将其包含在脚本中。

【讨论】:

    【解决方案4】:

    我个人的处理方式是:

    • 下载 CronniX(它已停产但仍然有效,例如 brew cask install cronnix

    • 通过/usr/local/bin/brew update 在 UI 中设置作业以每小时运行一次。

    让它在后台打勾!

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2013-03-28
      • 1970-01-01
      • 2013-10-26
      • 2018-04-27
      • 2018-08-10
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多