LANG=ja_JP.UTF-8
をcrontabの上の方に書いておけば良かった

書かないと、Rubyの場合ARGVに日本語を渡してcrontabから呼んだらencodingのエラーになる

incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)



crontabで定期的に時刻を読み上げる

これを動かそうとしていた
crontabで実行した時だけ引数に日本語渡せなくて困ってた

say-time
#!/usr/bin/env ruby
now = Time.now
s = now.min == 0 ? "#{now.hour}時" : "#{now.hour}時#{now.min}分"
cmd = "say #{s} #{ARGV.join ' '}"
puts cmd
system cmd

30分ごとに実行
SHELL=/usr/local/bin/zsh
HOME=/Users/sho
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/$HOME/bin:$PATH
LANG=ja_JP.UTF-8

0,30 * * * * say-time です -o otoya > /dev/null 2>&1
時刻の末尾に付けたい文字列や、sayに渡したいオプションはそのまま渡せる。
「8時30分です」とか言ってくれる。