Como posso definir a codificação do terminal ao executar um trabalho de crontab?

0

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?

    
por Konstantin 22.06.2014 / 20:50

1 resposta

0

Duas abordagens para tentar:

  • Certifique-se de reexportar o LANG e outras variáveis de ambiente para o seu subshell para garantir que o comando "google" também as veja.

link

  • Codifique as strings do dia da semana ("nap") com os códigos HTML (& #n;), já que eles estão indo para a web de qualquer maneira:

link

    
por 22.06.2014 / 22:33