У меня есть задание crontab, которое выполняет скрипт Ruby в Arch Linux. В основном это работает, но когда я вызываю "googlecl" для публикации в своем блоге, всегда отображается исключение "safeDecodeError" (например, googlecl.SafeDecodeError: ascii не удалось декодировать 'Vas\xc3\xa1rnap'), поскольку используемая мной командная строка содержит национальные венгерские символы (символы и т.д.). Моя локаль установлена hu_HU.UTF-8 командой:

sudo localectl set-locale LANG="hu_HU.UTF-8"

Моя строка crontab выглядит так:

05 15 * * * export LANG="hu_HU.UTF-8"; export LC_CTYPE="hu_HU.UTF-8"; /home/walaki/dl/musor-blogger

Мой скрипт на Ruby выглядит так:

#!/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

Когда я вызываю команду googlecl с помощью системного оператора Ruby, командная строка (var) содержит символы UTF-8 (символы и т.д.), И googlecl выдает исключение.

Когда я вызываю свой скрипт Ruby из обычного окна терминала вручную, он работает отлично. Но когда я использую crontab, чтобы запускать его каждый день, он всегда терпит неудачу из-за этой проблемы кодировки символов терминала.

У меня вопрос, как я могу установить кодировку символов терминала при запуске задания cron?

1 ответ1

0

Два подхода, чтобы попробовать:

  • Убедитесь, что вы повторно экспортировали переменные LANG и другие переменные среды для своей подоболочки, чтобы команда "google" их тоже видела.

https://stackoverflow.com/questions/8301294/shell-out-from-ruby-while-setting-an-environment-variable

  • Кодируйте строки дня недели ("nap") с помощью HTML-кодов (& # n;), так как они все равно идут в Интернет:

http://en.wikipedia.org/wiki/Unicode_and_HTML

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .