2017年06月 / 05月≪ 123456789101112131415161718192021222324252627282930≫07月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2011.06.10 (Fri)

cronだとLANGとかLC_CTYPEが反映されない

rubyのhpricot使ってたら
/usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/builder.rb:9:in `gsub': invalid byte sequence in US-ASCII (ArgumentError)
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/builder.rb:9:in `uxs'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/tag.rb:139:in `to_s'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/traverse.rb:160:in `block in inner_text'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/traverse.rb:160:in `map'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/traverse.rb:160:in `inner_text'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:480:in `block in '
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:495:in `[]'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:495:in `block (3 levels) in '
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:310:in `block in filter'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:308:in `each'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:308:in `find_all'
from /usr/lib/ruby/gems/1.9.1/gems/hpricot-0.8.4/lib/hpricot/elements.rb:308:in `filter'
...

ってエラーが出てしまった。
ruby1.9だと出てしまうらしい。
処理しようとしているデータはUTF8なんだけども、ここではなぜかUS-ASCIIとして処理されてしまってエラーが出ちゃってるようだ。
対処法としては
rubyを1.8にさげるか、LC_CTYPEにutf8をセットするか・・・他にあればいいんだけどみつからなかった。

rubyとかいちいちインストールしなおすのがめんどくさかったのでLC_TYPEにutf8をセットする方にした。

(ServersMan@VPS CentOS での場合)
デフォルトの文字コード自体をutf8にした。
ついでにLC_CTYPEも設定
# vi /etc/sysconfig/i18n


LANG=ja_JP.utf8
LC_ALL=ja_JP.utf8
LC_CTYPE=ja_JP.utf8
LINGUAS="ja da_DK en de_DE"

これで直接rubyコマンドをたたいた時点では上記のgsubのエラーは出なくなった。

が、同じ物をcronで動かした場合、gsubのエラーがまた発生した。
localeで設定されている文字コードを確認してみたところ

直接打った場合
[root@localhost ~]# locale
LANG=ja_JP.utf8
LC_CTYPE=ja_JP.utf8
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=


cronでlocale > 保存先/locale.log
みたいな感じでlocaleしてみたところ
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

これじゃあエラー出るわけだ・・・
直接打った時と同じにするには実行するcrontabの中に直接記述すればいいみたい。

# crontab -e

LC_CTYPE=ja_JP.utf8
LANG=ja_JP.utf8
# locale test
* * * * * locale > /home/.sites/xx/site1/web/locale.log

出力されたlocale.log
LANG=ja_JP.utf8
LC_CTYPE=ja_JP.utf8
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=

同じ感じになった!
これでエラーの出てたやつをcronに登録してもエラーが出ず、無事に動くようになった。ややこしい。


 |  00:03  |  サーバー  |  トラックバック(0)  |  コメント(0)  |  Top↑

Comment

コメントを投稿する

URL
コメント
パス  編集・削除するのに必要
非公開  管理者だけにコメントを表示
 

Trackback

この記事のトラックバックURL

この記事へのトラックバック

 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。