2011-07-07 7 views
0
require 'java' 

if ARGV.length == 0 
    puts "Usage: jruby change_timezone.rb America/Toronto" 
    exit 
end 

old_zone = File.read("../../../etc/timezone") 
puts old_zone 
time1 = Time.now 
puts "Current Time:"+time1.localtime.to_s 

new_zone = ARGV[0] 
open('../../../etc/timezone','w') do |f| 
    f.puts new_zone.to_s 
    f.close 
end 

new_zone = File.read("../../../etc/timezone") 
puts new_zone 
time2 = Time.now 
puts "Updated Time:"+time2.localtime.to_s 

上記は、ubuntuのタイムゾーン設定を変更するために書いたルビースクリプトです。設定ファイルは適切に変更されますが、スクリプトの出力は期待どおりではありません。Ubuntuのタイムゾーン設定ファイルを変更するためのRubyスクリプトのデバッグ

タイムゾーンのデフォルト値をAmerica/Torontoとします。 は今のコマンドを実行し、JRubyのchange_timezone.rbアジア/重慶は、その後、ここでは出力です:

America/Toronto 
Current Time:Thu Jul 07 14:43:23 -0400 2011 
Asia/Chongqing 
Updated Time:Thu Jul 07 14:43:23 -0400 2011 (My Note: +0800 expected!!!) 

は、コマンドを続行し、JRubyのchange_timezone.rbヨーロッパ/アムステルダムは、次のように終わる:

Asia/Chongqing 
Current Time:Fri Jul 08 03:18:25 +0800 2011 (My Note: it actually got updated from last run!!!) 
Europe/Amsterdam 
Updated Time:Fri Jul 08 03:18:25 +0800 2011 (My Note: +0200 expected!!!) 

でさらに進み、JRubyのchange_timezone.rbヨーロッパ/アムステルダム(マイノート:実際には最後のコマンドを繰り返す)、および以下の取得:

Europe/Amsterdam 
Current Time:Thu Jul 07 21:21:27 +0200 2011 
Europe/Amsterdam 
Updated Time:Thu Jul 07 21:21:27 +0200 2011 

できる人をそれが期待どおりに機能しなかった理由を理解しますか?

+0

したがって、スクリプトを再起動すると、正しいタイムゾーンが得られますか? – Dogbert

+0

はい。それは私を混乱させるものです:-( –

答えて

0

ほとんどのLinuxディストリビューションでは、 '/ etc/localtime'は正しいタイムゾーンファイルへのシンボリックリンクであるか、有効なタイムゾーンファイルです。 '/ etc/timezone'ファイルは '/ etc/localtime'に有効なタイムゾーンファイルを生成(またはシンボリックリンク)するために 'dpkg-reconfigure tzdata'コマンドで使用されます。最後に、タイムゾーンファイルは '/ usr/share/zoneinfo /'にあります。要約すると、 '/ etc/timezone'ファイルが変更された後の最後の一歩を欠場すると思います。

$ dpkg-reconfigure tzdata

+0

あなたが言っていることを理解しています。出力から見ると、時間は変わっています。最初の実行時に変更が反映されなかったということは変わっていました。それが期待に合わない理由を知ること。 –

関連する問題