Eu tenho uma tarefa crontab que executa um script Ruby no Arch Linux. Ele funciona basicamente, mas quando eu chamo "googlecl" para postar no meu blog, ele sempre mostra uma exceção "safeDecodeError" (por exemplo: googlecl.SafeDecodeError: ascii não pôde decodificar 'Vas \ xc3 \ xa1rnap'), porque a linha de comando Eu uso contém caracteres húngaros nacionais (éáö, etc). Minha localidade está configurada como hu_HU.UTF-8 por comando:
sudo localectl set-locale LANG="hu_HU.UTF-8"
Minha linha crontab se parece com:
05 15 * * * export LANG="hu_HU.UTF-8"; export LC_CTYPE="hu_HU.UTF-8"; /home/walaki/dl/musor-blogger
Meu script Ruby parece:
#!/usr/bin/ruby
# encoding: utf-8
require 'watir-webdriver'
require 'pry'
reklam=["http://keresztenytars.net","http://premium-leechers.blogspot.hu"]
fname="/home/walaki/util/radiomusor-blogger.txt"
b = Watir::Browser.new :phantomjs
if ARGV.length==0 then
date_today=Time.now.to_s.split(" ")[0]
else
date_today=ARGV[0]
end
url="http://hangtar.radio.hu/kossuth#!#"+date_today
datepart=date_today.gsub("-","")
dow=Date.parse(date_today).strftime("%A")
case dow
when /monday/i
nap="Hétfő"
when /tuesday/i
nap="Kedd"
when /wednesday/i
nap="Szerda"
when /thursday/i
nap="Csütörtök"
when /friday/i
nap="Péntek"
when /saturday/i
nap="Szombat"
when /sunday/i
nap="Vasárnap"
end
puts url
puts nap
puts datepart
b.goto url
b.links(:text=>"Részletes műsor")[0].click
sleep 6
#html="";b.divs(:class=>"musorelem sclick").each{|d| d.click rescue nil;html+=b.html}
html=b.html
tc=html.scan(/class\=\"me_idopont.*?\<span\>(.*?)\<\/span\>.*?\<div.*?class\=\"me_cim.*?\<span\>(.*?)\<\/span\>.*?\<div.*?class\=\"me_leiras.*?\>(.*?)\<\/div\>/m).flatten
h={};for i in 0..(tc.length-1)/3; h.merge!(tc[i*3]=>[tc[i*3+1],tc[i*3+2]]);end
open(fname, 'w') { |f|
f.puts "<div class='post-body entry-content' itemprop='articleBody'>"
f.puts "<b>"+nap+"</b><br>"
h.each do |k,v|
#line="<a href=http://stream001.radio.hu:443/stream/"+datepart+"_"+k.gsub(":","")+"00_1.mp3>"+k+" "+v[0]+"</a><br><p style='margin: 0px 0px 0px 15px; text-align:justify; line-height:10px'><small>"+v[1].gsub("<br>","\n")+"</small></p>"
line="<a href=http://stream001.radio.hu:443/stream/#{datepart}_#{k.gsub(":","")}00_1.mp3>#{k}</a> <a href='#{reklam.sample(1).first}' target=_blank>#{v[0]}</a><br><p style='margin: 0px 0px 0px 15px; text-align:justify; line-height:10px'><small>#{v[1].gsub("<br>","\n")}</small></p>"
#binding.pry
#puts line
f.puts line
end
f.puts "</div>"
}
var='google blogger post --blog="My Blog" --tags="'+nap+'" --title="'+date_today+', '+nap+'" --src=/home/walaki/util/radiomusor-blogger.txt'
system var
Quando eu chamo o comando googlecl com a instrução "system" do Ruby, a linha de comando (var) contém caracteres UTF-8 (áéüö, etc) e o googlecl lança uma exceção.
Quando eu chamo meu script Ruby da janela de terminal usual manualmente, ele funciona perfeitamente. Mas quando eu uso crontab para iniciá-lo diariamente, ele sempre falha devido a esse problema de codificação de caracteres de terminal.
Minha pergunta é como definir a codificação de caracteres do terminal ao executar a tarefa cron?