cronでスクレイピングさせると日本語が消える問題
解決
スクレイピング自体はphantomjsでやらせていたので、こいつが悪さしてるかと思ったけど、そうではなくて、cron実行時の環境変数がおかしいことが原因みたい。
具体的には、実行スクリプト中で以下のように環境変数を設定する
export LANG="ja_JP.UTF-8"
HTTPリクエストヘッダ内のaccept-languageが日本語に設定されて、これで上手く行った。
が、一つ疑問なのはログインシェルでecho $LANGとすると"ja_JP.UTF-8"と返ってくるのはいいんだけど、cronで実行させた時にはecho $LANGしても何も設定されていないこと。
以下のスクリプトをcronで実行してみた。
#!/bin/bash echo $LANG > test.dat
上記のようにsourceコマンドなどで実行するとtest.datには"ja_JP.UTF-8"と書かれているが、cron実行したときはtest.datには何も書かれていない。
/etc/sysconfig/i18n はja_JP.UTF-8で設定してあるんだけど、この設定ファイルの値が反映されるわけじゃないんだろうか。