macOS High Sierra でのお話。
作業中に Tima Machine が動き出すと、macOS が重くなったり固まったり
するので、長年プチイライラしていました。
TimeMachineScheduler
というアプリを使ったら、当初は調子が良かった
のですが、最近はうまく実行してくれません。なぜだ…。
AppleScript + launchd で定期実行出来ないかな?とふと思い立ちました。
調べたら AppleScript を使わずとも /usr/bin/tmutil がありました。
Time Machine CLI です。’$ man tmutil’ で詳しいヘルプを参照できます。
こいつを launchd 使って定期実行したらうまくいきました。ちなみに
macOS では cron は非奨励で、代わりに launchd が奨励されています。
作成した scheduled-timemachine.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>Label</key>
<string>net.masutaka.scheduled-timemachine</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>date; sudo tmutil disable && pmset -g ps | grep -q 'AC Power' && tmutil startbackup -b; echo</string>
</array>
<key>StandardOutPath</key>
<string>/Users/masutaka/.Trash/scheduled-timemachine.log</string>
<key>StandardErrorPath</key>
<string>/Users/masutaka/.Trash/scheduled-timemachine-err.log</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>00</integer>
</dict>
</dict>
</plist>
解説
<sudo tmutil disable>
「バックアップを自動作成」は ON にする必要はないため、このコマンド
で OFF にしています。man にも書かれていますが、root 権限が必要なの
で、sudo で実行しています。
<pmset -g ps | grep -q ‘AC Power’>
このコマンドでバッテリー利用時の Time Machine バックアップを避けて
います。他に良いやり方があるか?や、そもそも Time Machine が良い感
じに判断してくれる?などは未検証です。
# AC アダプター(給電)利用中
$ pmset -g ps
Now drawing from 'AC Power'
-InternalBattery-0 (id=4980835) 100%; charged; 0:00 remaining present: true
# バッテリー利用中
$ pmset -g ps
Now drawing from 'Battery Power'
-InternalBattery-0 (id=4980835) 100%; discharging; (no estimate) present: true
<tmutil startbackup -b>
-b は前回のバックアップが終わっていなかったら、待つオプションです。
tmutil startbackup は root 権限不要です。
使い方
このディレクトリにコピーします。シンボリックリンクでも良いです。
$ cd ~/Library/LaunchAgents
$ cp /path/to/scheduled-timemachine.plist .
サービスを登録します。
$ launchctl load scheduled-timemachine.plist
サービスを削除します。
$ launchctl unload scheduled-timemachine.plist
scheduled-timemachine.plist を変更した場合は一旦削除してから登録す
る必要があります。
まとめ
launchd を使って Time Machine を実行することで、作業中のストレスを
減らせました。
macOS デフォルトの機能を使ったので、TimeMachineScheduler
も不要に
なりました。