82195
## 起きてる問題

AWS上で利用しているEC2サーバーのシステムクロックが、現在時刻とズレてしまっている。

```

    $> date
    2021年  8月 31日 火曜日 08:50:03 UTC
    # 本当の現在時刻は2021/8/31 07:34:00 UTC
    
```

## 前提および利用環境

・Amazon EC2サーバーを利用  
・OSは Red Hat Enterprise Linux Server release 5.5 (Tikanga)  
・ntpdサービスは諸事情により利用不可

## やったこととぶち当たった壁

OSが古すぎるせいで、[Amazon Time Sync
Service](https://aws.amazon.com/jp/blogs/news/keeping-time-with-amazon-time-
sync-service/)はインストールすら不可能。  
ntpdサービスも制限されていて使えない。  
5,6年前くらいからある、敏感なレガシーシステムでありOS再起動もできない。

最後に行き着いた先は、dateコマンドで手動で時刻を変更するという方法。  
しかし、コマンドを実行しても、現在時刻がアップデートされません。

```

    $> date
    2021年  8月 31日 火曜日 08:50:03 UTC
    
    $> date -s "2021-08-31 07:34:00"
    2021年  8月 31日 火曜日 07:34:03 UTC
    
    $> date
    2021年  8月 31日 火曜日 08:50:03 UTC
    # 更新できてない...
    
```

原因がわかりそうな方がいれば、どんな情報でも構わないのでお答えいただきたいです。  
よろしくお願いします。
CC BY-SA 4.0
2021-08-31T08:27:56.540
81137
2021-09-04T05:26:41.037
2021-09-03T12:08:46.083
47990
47990
question
linux amazon-ec2 rhel
dateコマンドでEC2のシステムクロックを更新できない
>
```

>     $> date
>     2021年  8月 31日 火曜日 08:50:03 UTC
>  
>     $> date -s "2021-08-31 07:34:00"
>  
```

`date`は念じた書式を理解してくれるわけではなく、明示的に書式を指定する必要があります。時刻調整であって日付を変える必要がない場合はroot権限で

```

    #> date +%T -s "07:34:00"
    
```

ですかね。これは

```

    $> date +%T
    08:50:03
    
```

に対応します。

* * *

Red Hat Enterprise Linux 5であっても`ntpd`は存在するわけで、本質的にはなぜこれが動作しないのかだと思います。その意味では

>
```

>     2021年  8月 31日 火曜日 08:50:03 UTC
>  
```

という記述が気になりました。時刻が９時間ずれていませんか？ そしてその理由はタイムゾーンが設定されていないのではありませんか？ 08:50:03 UTC
は日本時間の 17:53:03 を意味します。
CC BY-SA 4.0
2021-08-31T21:05:59.897
81143
2021-08-31T21:05:59.897
4236
81137
answer
解決できたので、ここに方法を記載しておきます。

### そもそもズレが起きる原因

システムクロック、ハードウェアクロック共にズレが起きるのは仕方ない。  
そのズレを定期的に修正するために、一般的にはntpdサービスが裏で躍動してる。  
ただ、このサーバーの場合、外のntpサーバーを参照できない状況であり、実質ntpによる定期的修正はできない状況。  
このような理由で、ちょっとずつ時間のズレは起きるようになってる。

### 今回の解決方法

システムクロックを修正するには、今回の場合だと`date -s "2021-09-02
18:00:00"`というコマンドで完了するはずなのだが、それでも更新できなくて苦戦した。（ntpdサービスも停止していたのに...）  
調査の結果、「VMのクロックにシステムクロックが同期されている」ことが原因であるとわかった。  
勝手に同期される設定を変更してあげて、再度システムクロック更新を試みたら成功した。

```

    #> vim /etc/sysctl.conf
    /** 末尾に以下を記載 **/
    # Allow the VM to update it's own clock, and do not use the DOM host clock.
    xen.independent_wallclock=1
    
    /** network（or networking）サービスを再起動 **/
    #> /etc/init.d/network restart
    
    /** 時刻を修正 **/
    #> date -s "2021-09-02 18:00:00"
    
```

### 参考にした情報

英語版Q&Aに同じような質問があり、今回はその情報を参考にしました。  
<https://superuser.com/questions/510691/linux-date-s-command-not-working-to-
change-date-on-a-server>

今回、様々な回答を寄せてくださった皆様、ありがとうございました。
CC BY-SA 4.0
2021-09-03T01:56:50.860
82195
2021-09-04T05:26:41.037
2021-09-04T05:26:41.037
47990
47990
81137
answer