2013-12-11 9 views
7

Ho discusso su alcuni linux tech di lunga durata per automatizzare il mio lavoro quotidiano. Ho trovato cron molto potente se posso usarlo per controllare gli aggiornamenti di alcuni pacchetti che ho sul mio sistema.come aggiornare homebrew con Cron su Mac os

Ad esempio, desidero aggiornare il mio Homebrew ogni giorno alle 23:00. Quello che ho fatto è, con sudo crontab -u user -e, ho aperto crontab in Vim. E ho inserito i seguenti comandi, per fare aggiornamenti per homebrew e mandarmi una email.

Ecco il codice:

[email protected] 
* 23 * * * brew update 

e salvarlo aspettare magia accade. Invece di excuting questo comando, nella e-mail che ho ricevuto, si dice /bin/sh: brew : command not found

Ma quando digito /bin/sh nel terminale per aprire sh e digitare brew update aggiornerà la Homebrew.

Che cosa ho fatto di sbagliato con la mia crontab configurazione?

Qualsiasi aiuto sarà apprezzato!

+2

L'uso di 'crontab' sembra deprecato su Darwin (Mac OS X è basato su Darwin). Usa invece 'launchd'. Questo è uno dei tanti tutorial rapidi: http://alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs – SimonSimCity

+1

non so se volessi eseguire ogni minuto dell'undicesima ora ... probabilmente stai ricevendo un sacco di email tra 11 e 12 – mogga

risposta

5

Ho avuto la stessa idea e un cronjob è una buona opzione. Tuttavia, ho trovato uno script, che ti avviserà, se è disponibile una nuova versione di una formula, installata sul tuo Mac. Non volevo che accadesse automaticamente.

http://chrisstreeter.com/archive/2012/08/homebrew-package-update-notifications-on-mountain-lion.html

ho esteso lo script per non mostrare le formule appuntato il notificante: https://gist.github.com/SimonSimCity/13832e2e03597a6be793

Quando si tratta di scrivere il processo di cron, ho deciso di andare per un launchd-agent, perché questo viene eseguito anche se il Mac viene avviato in seguito. I lavori Cron funzionano solo se il tuo Mac è già attivo in quel momento.

Per qualche aiuto in cronjob vs launchd, vi consiglio di leggere questo o un'introduzione simile: http://alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs

Ecco la mia configurazione. Funziona, come puoi vedere, tutti i giorni alle 10:00 e alle 15:00. Lo script, chiamato dall'agente, si trova a /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> 

Congratulazioni! Verrà ora notificato se è disponibile un nuovo aggiornamento.Basta chiamare lo brew upgrade se ci si sente obsoleti o includerlo nello script;)

0

Probabilmente c'è qualcosa di sbagliato nella configurazione dello bash. Assicurati di impostare lo PATH in modo che contenga la directory in cui è installato brew. Potresti averlo impostato nel tuo ~/.profile ma assicurati che sia impostato anche nel tuo ~/.bashrc. In alternativa, è possibile impostare nel vostro crontab nello stesso modo in cui si imposta MAILTO

16

Cron non avere il vostro percorso definito, assicurarsi che si chiami sempre i comandi con il percorso completo, che è probabilmente /usr/local/bin/brew update

Questo è considerato una buona pratica per mantenere in esecuzione comandi indesiderati/inattesi. Se qualcuno inserisce uno script malevolo chiamato "brew" da qualche altra parte nel tuo percorso, ma prima di/usr/local/bin, viene chiamato invece.

+0

Grazie a @Donovan, questo ha funzionato. Ora so dove configurare il mio 'crontab'. molto grazie –

+0

Prego. Per favore, segna questo come risposta, per favore. – Donovan