Macの定期処理

## 経緯
- Macで動いているJenkinsさんのダッシュボードのCSSが壊れる
- Jenkinsのwebroot以下のcssとかimgが消えている
	- /private/var/folders/q0/yzpjz6fn3k70x2yth9pdn830w3vyt7/T/jetty-0.0.0.0-8080-jenkins.war--any-/webapp
	- Jenkins起動時に確認

		```
		INFO: Extract jar:file:/Applications/Jenkins/jenkins.war!/ to /private/var/folders/q0/yzpjz6fn3k70x2yth9pdn830w3vyt7/T/jetty-0.0.0.0-8080-jenkins.war--any-/webapp
		```
- Macの日次処理があやしい
	- [人類最大の謎。JenkinsのCSS壊れる問題が解明された](http://laiso.hatenablog.com/entry/2013/12/12/%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%A4%A7%E3%81%AE%E8%AC%8E%E3%80%82Jenkins%E3%81%AECSS%E5%A3%8A%E3%82%8C%E3%82%8B%E5%95%8F%E9%A1%8C%E3%81%8C%E8%A7%A3%E6%98%8E%E3%81%95%E3%82%8C%E3%81%9F)
- Macの日次処理ってどうなってるんでしょう

## 環境
- MacOS X 10.9.1

## 本題
- Macの日次（週次・月次）処理は以下の用にcronに設定されている

```xml:com.apple.periodic-daily.plist
// com.apple.periodic-[daily|weekly|monthly].plist
$ cat /System/Library/LaunchDaemons/com.apple.periodic-daily.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>com.apple.periodic-daily</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/libexec/periodic-wrapper</string>
                <string>daily</string>
        </array>
        <key>LowPriorityIO</key>
        <true/>
        <key>Nice</key>
        <integer>1</integer>
        <key>LaunchEvents</key>
        <dict>
                <key>com.apple.xpc.activity</key>
                <dict>
                        <key>com.apple.periodic-daily</key>
                        <dict>
                                <key>Interval</key>
                                <integer>86400</integer>
                                <key>GracePeriod</key>
                                <integer>14400</integer>
                                <key>Priority</key>
                                <string>Maintenance</string>
                                <key>AllowBattery</key>
                                <false/>
                                <key>Repeating</key>
                                <true/>
                        </dict>
                </dict>
        </dict>
        <key>AbandonProcessGroup</key>
        <true/>
</dict>
</plist>
```

- 手動で実行する

```bash:periodic
$ sudo periodic daily
$ sudo periodic weekly
$ sudo periodic monthly
```

- logを確認する

```bash:log
$ less /var/log/daily.out
$ less /var/log/weekly.out
$ less /var/log/monthly.out
```

- 実行されるscriptを確認する

```bash:script
// それぞれ以下のディレクトリにあるscriptが実行される	
/etc/periodic/daily
/etc/periodic/weekly
/etc/periodic/monthly

// configファイル
/etc/defaults/periodic.conf
```

- userが処理を追加する
	- /etc/daily.localにshell scriptを追加

```bash:periodic.local
# 999.local
daily_local="/etc/daily.local"              # Local scripts
weekly_local="/etc/weekly.local"              # Local scripts
monthly_local="/etc/monthly.local"              # Local scripts
```

## 参考
- [Mac OSXにおけるシェルスクリプトの定期的な実行](http://advweb.seesaa.net/article/406711.html)
- [Mac OS Xのメンテナンススクリプトを実行する方法](http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-run-maintenance-script-of-mac.html)
- [BSD System Manager's Manual PERIODIC(8)](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/periodic.8.html)
- [cronからlaunchdへ（より効率的なジョブ管理を目指して)](http://d.hatena.ne.jp/zariganitosh/20090308/1236539611)