KirIn 落書き帳

素人がプログラミング, FPGA, LSIをお勉強しているメモ書きです。間違いがあればご指導していただけたら幸いです。

Macでcronの使い方を学ぶ

最近ジョブ管理の自動化やバージョン管理をもっと導入して快適なプログラミング生活を送りたい、いや送らねばならないと感じています。そこでジョブ管理の自動化の勉強を兼ねてターミナルコマンドのcronの勉強をしたいと思います。

参考図書 Software Design 2014年12月号 | Hinemasで学ぶジョブ管理超入門

Macの初期設定

crontabを使ってcronの設定をいじっていくのですがデフォルトのエディターはvimとなっています。 vimのバックアップファイルが悪さをしてcronが上手く動かないので以下の設定を.vimrcに追加します。

set backupskip=/tmp/*,/private/tmp/*

homebrewでインストールしたmacvimを使いたいためログインシェルの設定ファイルに以下の設定を追加します。

export EDITOR=/usr/local/bin/vim

一般的なRedhadでのディレクトリ構造は以下のようになっているようなのでできるだけ、これを踏襲します。

ファイル名/ディレクトリ名 内容
/etc/crontab システム全体に関わるcrontabファイル
/var/spool/cron/user ユーザ個別のcrontabファイル(crontabコマンドで指定した時間やスクリプトがここに設定される)
/etc/cron.hourly 毎時実行したいシェルスクリプトを配置するディレクトリ
/etc/cron.daily 毎日実行したいシェルスクリプトを配置するディレクトリ
/etc/cron.weekly 毎週実行したいシェルスクリプトを配置するディレクトリ
/etc/cron.monthly 毎月実行したいシェルスクリプトを配置するディレクトリ
/etc/cron.d 上記以外に実行したいシェルスクリプトを配置するディレクトリ

実行方法

コマンド 内容
crontab -e #設定ファイル編集
crontab -l #設定ファイル表示
crontab -r #設定ファイル削除
#設定ファイルの書き方
分 時 日 月 曜日 コマンド

# 例1 毎日3時間おきにjob01.shを実行
* */3 * * * job01.sh

# 例2 月~水曜日の15:00と17:00にjob02.shを実行
* 15,17 * * 1-3 job02.sh
設定ファイル詳細
0~59までの数字
0~23までの数字
1~31までの数字
1~12までの数字
曜日 0~7までの数字(0と7=日曜,1=月曜,...)
コマンド スクリプトorコマンド

TimemachineのターミナルコマンドでタイムマシンHDDがマウントされている場合のみ毎日24:00にバックアップを行うように設定します。 まずtmut​​il destinationinfoコマンドを用いてHDDのIDを取得します、そしてtmutil startbackup --destination 調べたIDでバックアップを開始します。

# crontab -e
0 0 * * * /etc/cron.daily/backup.sh
#backup.sh
#! /usr/local/bin/zsh
if diskutil list | grep timemachine;then
    tmutil startbackup --destination FB2B288D-EA36-422C-96CA-0D9B0995706A
else
    echo "I can't make backup file" > ./backup.log
fi