カレンダーがおかしい???
しばらく振りに起動したMacBook。なぜだかシステム時計が1か月ぐらい遅れている上に、システム設定の「日付と時刻を自動的に設定」のオンオフを繰り返してみても一向に治らない。
仕方なく一旦は手動で正しい日時に直したが、納得がいかず、解決方法をネット検索してみると以下のページに辿り着いた。
この記事は、そのページで使われているターミナルコマンドの説明です。ターミナルコマンドに詳しい方には不要な記事となります。
システム環境
MacBook Pro (Intel)
macOS Sonoma 14.1.1
参考にしたページ
参考ページに習って、ターミナルで以下のコマンドを打って解決しました。
$ sudo rm /var/db/timed/com.apple.timed.plist
$ sudo sntp -S ntp.nict.jp
-8.836065 +/- 0.006581 ntp.nict.jp 2001:df0:232:eea0::fff4
$ sudo sntp -S ntp.nict.jp
+0.000710 +/- 0.007049 ntp.nict.jp 2001:df0:232:eea0::fff4
$ sudo sntp -S ntp.nict.jp
+0.000160 +/- 0.007103 ntp.nict.jp 2001:df0:232:eea0::fff4
$ sudo sntp -S ntp.nict.jp
-0.000140 +/- 0.006243 ntp.nict.jp 2001:df0:232:eea0::fff4
$ ps -ef | grep timed
266 138 1 0 3:42PM ?? 0:00.18 /usr/libexec/timed
501 2699 2585 0 8:10PM ttys000 0:00.00 grep --color=auto timed
$ sudo kill 138
$ sudo sntp -S ntp.nict.jp
+0.000600 +/- 0.005991 ntp.nict.jp 2001:df0:232:eea0::fff3
$ date
2024年 1月 8日 月曜日 20時11分23秒 JST
コマンドの説明
まずは、ファイル /var/db/timed/com.apple.timed.plist
を削除します。
$ sudo rm /var/db/timed/com.apple.timed.plist
このファイルは、macOSオペレーティングシステムにおけるtimed
というシステム時計の管理を行うデーモンの設定ファイルです。これにはシステム時計の同期設定や過去の同期状態などが保存されています。例えば、NTPサーバーとの時刻同期の設定や、最後に同期した時の情報が含まれています。このファイルを削除することでtimed
デーモンの状態をリセットします。
デーモンとは、ユーザーの介入なしにバックグラウンドで実行されるプログラムやプロセスのことで、通常はシステムの起動時に開始され、シャットダウンまで動作し続けます。
次に、システムの時計を指定されたNTPサーバー(この場合はntp.nict.jp
)と同期します。
$ sudo sntp -S ntp.nict.jp
この実行に対するレスポンスは、以下のとおりです。
-8.836065 +/- 0.006581 ntp.nict.jp 2001:df0:232:eea0::fff4
これは、システム時計とNTPサーバー間の時刻差とその精度を表しています。
-
-8.836065
: これはシステム時計がNTPサーバー時刻より約8.836秒遅れていることを示します。負の値はシステム時計が遅れていることを意味します。 -
+/- 0.006581
: これは測定の精度で、ゼロに近いほど精度が高いことになります。 -
ntp.nict.jp
: これは同期を試みたNTPサーバーの名前です。 -
2001:df0:232:eea0::fff4
: これはNTPサーバーのIPv6アドレスです。
このコマンドの実行により8.836秒遅れていたシステム時計がサーバー時刻に合わせて調整されました。
そして、参考ページの例にならって、同じコマンドを4回繰り返しています。
次に、timed
という文字列が名前に含まれるプロセスを検索します。
$ ps -ef | grep timed
-
ps -ef
: これは「Process Status」のコマンドで、システム上で実行中の全てのプロセスの詳細なリストを表示します。-e
フラグはすべてのプロセスを、-f
フラグはフルフォーマットでの情報を意味します。 -
|
: これはパイプと呼ばれ、一つのコマンドの出力を別のコマンドへと渡すために使用されます。 -
grep timed
: これはps
コマンドの出力から「timed」という文字列を含む行を検索します。grep
はテキスト検索ツールです。
結果として、このコマンドはシステム上で実行中の timed
デーモンの詳細を表示します。これは、特定のプロセスが実行中かどうかを確認したり、そのプロセスに関する情報を得るために使用されます。
266 138 1 0 3:42PM ?? 0:00.18 /usr/libexec/timed
-
266
: プロセスの実行ユーザーID。 -
138
: プロセスID。 -
1
: 親プロセスID。1は通常、システムのinitプロセスを示します。
initプロセスとは、システムの起動時にカーネルによって最初に実行され、その後のシステムの初期化と他のプロセスの起動を管理するものです。 -
0
: プロセスの優先度。小さいほど優先度が高い。 -
3:42PM
: プロセスの開始時刻。 -
??
: このプロセスが制御端末(tty)に関連付けられていないことを示します。
UNIX系のオペレーティングシステムにおいて、プロセスが制御端末(tty)に関連付けられていない場合、それはバックグラウンドで動作しているデーモンプロセスやシステムサービスであることを意味します。プロセスには通常、ユーザーの入力を受け取るための端末が割り当てられますが、「??」と表示される場合、そのプロセスは端末から独立しており、対話的な入力を必要とせず、バックグラウンドで自動的に実行されることを示しています。 -
0:00.18
: プロセスがCPUに使用された合計時間。 - /usr/libexec/timed: 実行中のプロセスのコマンド名。これが時刻同期
timed
デーモンです。
501 2699 2585 0 8:10PM ttys000 0:00.00 grep --color=auto timed
これは grep
コマンド自体の情報です。つまり、grep
コマンドを実行しているプロセスの情報を表示しています。
要するに、この出力は timed
デーモンが実行中であること、そしてその瞬間に grep
コマンドも実行されていることを示しています。
そして、以下で時刻同期timed
デーモンのプロセスID138
を指定して終了させます。
$ sudo kill 138
もう一度、sntp
コマンドを実行して時刻合わせと同時にtimed
を再起動しています。
$ sudo sntp -S ntp.nict.jp
+0.000600 +/- 0.005991 ntp.nict.jp 2001:df0:232:eea0::fff3
最後に、現在時刻を確認しています。
$ date
2024年 1月 8日 月曜日 20時11分23秒 JST
ゴメンね、MacBook
macOSはUNIXベースで、多くのUNIXシステムと共通の特徴を持っています。LinuxもUNIXの設計思想に基づいており、macOSでの学習経験はLinuxサーバーの管理や運用の知識にもつながることでしょう。
今回の対応で、これらのちょっとした知識を得ることができました。無駄なく他でも役立つ知識が自然と身についていくのは効率的でいいですね。Macの人気の源はこんなところにもあるのかもしれません
MacBookよ、ほったらかしにしてゴメンね