2013-12-11 71 views
7

我一直在探討一些持久的Linux技術來幫助自動化我的日常工作。我發現cron是非常強大的,如果我可以用它來檢查我的系統上的某些軟件包的更新。如何在Mac OS上使用Cron更新自制軟件

例如,我想在每天晚上11點更新我的Homebrew。我做的是sudo crontab -u user -e,我在Vim開了crontab。然後我將下面的命令放入其中,以便更新homebrew併發送給我一封電子郵件。

下面的代碼:

[email protected] 
* 23 * * * brew update 

,我保存它,等待奇蹟發生。相反excuting此命令,在我收到的電子郵件,它說/bin/sh: brew : command not found

但是,當我輸入端子/bin/shbrew update打開sh和類型將更新Homebrew

我做了什麼毛病我crontab配置?

任何幫助將不勝感激!

+2

在Darwin(Mac OS X基於Darwin)上似乎棄用了'crontab'。改用'launchd'。這是許多快速教程之一:http://alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs – SimonSimCity

+1

不知道如果你想執行第11個小時的每一分鐘......你可能會收到11至12之間的很多郵件 – mogga

回答

5

我有同樣的想法和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,或者將其也納入腳本中;)

0

您的bash配置可能有問題。請確保您設置了PATH,以便它包含brew所在的目錄。您可能已將其設置在您的~/.profile中,但請確保它也設置在您的~/.bashrc中。或者,你可以在你設置MAILTO不會有你的PATH定義

16

克朗,確保你總是使用完整路徑,這可能是/usr/local/bin/brew update

這是調用命令以同樣的方式將其設置在crontab被認爲是保持不想要的/意外的命令運行的良好實踐。如果有人在你的路徑中的某處放置了一個名爲'brew'的惡意腳本,但在/ usr/local/bin之前,它會被調用。

+0

謝謝@Donovan,這個工作。現在我知道在哪裏配置我的'crontab'。非常感謝 –

+0

不客氣。如果您願意,請將此標記爲已回答。 – Donovan

相關問題