今更ですが…crontab の PATH

OSX 10.5 以降の crontab

それ以前がどうだったかは知らないけど、一般的な linuxの crontab(cronの設定ファイル)は、

/etc/crontab

~/.crontab

/var/spool/cron/crontabs/"username"

などなど、色々変遷してきたみたいですが、現在 LION の crontab はココにあります。

/usr/lib/cron/tabs/"username"

ルート権限で作成した crontab も同じく "root" という名前で同じディレクトリに存在します。

…調べていたら、launchd の仕組みに変わってから、crontab -e で作成しない限り、このファイルもできず、crond も起動しないそうですが。


cron 実行時のパスについて

ログインしてから、env コマンドで、現在の環境変数をリストできます。よく cron で実行するときは、どのファイルもコマンドもパスが通りません。

crontab で指定する PATH キーワードですが、ここに、よくログインシェルなどで指定するように

PATH=$PATH:.:$HOME/bin:...

などと指定すると、ごく普通のコマンドにパスが通らずにエラーになったりします。試しに cron で、

/usr/bin/env > /tmp/env.txt

として実行させてみたら以下が返ってきました。

SHELL=/bin/sh

USER=roba

PATH=/usr/bin:/bin

PWD=/Users/roba

SHLVL=1

HOME=/Users/roba

LOGNAME=roba

_=/usr/bin/env

ということで、ここで指定されている環境変数以外は使えないことになります。ですので、crontab で PATH を指定するときは

PATH=/usr/bin:/bin

を踏まえて

PATH=$PATH:(/usr/bin:/bin 以外のパス)

とするか、"/usr/bin:/bin" も含めて

PATH=/usr/bin:/bin:/opt/local/bin:/opt/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:(追加したいパス)

さらに必要であれば /Developer の下の実行したいファイルがあるディレクトリも足すとよいと思います。$HOME にはパスが通っていますので、:$HOME/bin: という指定はオッケーです。


以上、怪我の功名。1ヶ月足らずで SSD がぶっ壊れたお陰

3/17に新しい SSD 128GB に換装したばかりだったのに、ある日突然 ? マークのフォルダが表示されて起動しなくなり、旦那のマシンで修復 or 消去を試みるも認識されず、仕方なく今度は1.5万円コースで Intel 様の SSD を急遽発注しました。壊れたSSDは消去もできないので、どうしたもんかと転がしてあります。個人情報入りまくりなので。これ、たとえ暗号化してあっても、絶対渡したくないなぁ。ちなみに 9千円也。授業料は高かった。

そんで、TimeMachine からすべては戻らず、数日間無駄にしたというわけです。crontab がぶっ飛んでいたのにはびっくりしました。/etc の下もあまりいじらないのだけれど、/etc/aliases もなくなっていました。この辺の規則はよくわかりません。TimeMachine から戻すときすべてのユーザを選んでおけば大丈夫だったのか? でも自分はルート権限持ってるデフォルトユーザだったし…???


教訓、SSD には機密情報を入れないこと

・アクセスが多少遅くても、機密情報は外付け HDD (持って逃げられるようなのが望ましい)に保存する

・もしくはUSBポートが空いていたら USB メモリに保存する

・一応、暗号化はしとくこと