LoginSignup
8
10

More than 5 years have passed since last update.

Homebrewのupdateを自動化する(launchd)

Last updated at Posted at 2015-08-03

概要

Homebrewの各種コマンド brew doctor brew update brew upgradeを一日一回自動実行するようにし、homebrewでinstallしたアプリケーションを常に最新化する手順を記載します.

前提

Brefileファイルの管理は、brew-fileを利用しています.
https://github.com/rcmdnk/homebrew-file

なのでupdateコマンドに微妙に差異があるので、スクリプトは適宜読み替えて下さい.

script準備

brew update等を実行するスクリプトを準備する.

#!/bin/sh

launchctl setenv PATH /usr/local/bin:$PATH
log_dir=$HOME/Library/Logs/Homebrew/update
log_name=${log_dir}/`date "+%Y%m%d"`.log

if [ ! -d ${log_dir} ]; then
  mkdir -p ${log_dir}
fi

brew doctor >> ${log_name} 2>&1
if [ $? -eq 1 ]; then
    brew file update >> ${log_name} 2>&1
    brew file cask_upgrade >> ${log_name} 2>&1
fi

自動実行設定

plist準備

macで自動実行するためにplistを用意する

$ cd $HOME/Library/LaunchAgents
# ファイルの中身については以下を参照
$ sudo vi homebrew_update.plist

homebrew_update.plist

<?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>Disabled</key>
    <false/>
    <key>UserName</key>
        <string>user</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
        <key>HOME</key>
        <string>/Users/user</string>
    </dict>
    <key>Label</key>
    <string>homebrew_update</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/user/dotfiles/bin/brew_update</string>
    </array>
    <key>RunAtLoad</key>
    <false/>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>01</integer>
            <key>Minute</key>
            <integer>00</integer>
        </dict>
    </array>
</dict>
</plist>

以下注意点

  • HOME
    各ユーザのHOMEディレクトリを指定して下さい.
    launchdには$HOMEが引き継がれないので、この設定が必須...
  • Label
    各自お好きな名前に
  • StartCalendarInterval
    何時に定期実行したいか記述. 例の場合は1時に実行されるので、おこのみで変更する

登録

# plist登録
$ sudo launchctl load -w $HOME/Library/LaunchAgents/homebrew_update.plist
# 登録されているか確認
$ sudo launchctl list | grep homebrew_update
-       0       homebrew_update

実行確認

$HOME/Library/Logs/Homebrew/updateのログを確認して、問題無いか確認する

苦労した点

PATHがスクリプトに引き継がれてない

最初スクリプト/plistを作って実行したら以下のエラーがsystem.logにでた。

Aug  3 15:59:00 macbookair com.apple.xpc.launchd[1] (homebrew_update[4403]): Service exited with abnormal code: 1

brew doctor部分で実行できずにこけていたので、調べてlaunchctl setenv PATH /usr/local/bin:$PATHをスクリプト内に追加する事で解決

HOMEがスクリプトに引き継がれてない

スクリプト内のbrew update実行時に、以下のようなエラーがでて失敗していた.

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

原因はHOMEが引き継がれずに、.ssh/configが読めてなかったから.
どうもHOMEは認識できないようで、plistで明示的にHOMEを宣言してあげる事で解決

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10