that it's been sync-ed to an NTP server manually within 500 ms or better.
NTP is much better, +- 5ms is not even ambitious. So, systemd-timesyncd
will do wonders!
You'll want to edit /etc/systemd/timesyncd.conf
to set PollIntervalMaxSec=
to something reasonable (I'd recommend not going below 120 s). Then, you can activate the service using systemctl enable --now systemd-timesyncd
and it will keep your system clock within a few milliseconds of UTC.
(some distros use chronyd
instead, same general idea applies, but different config file, and the service is called chronyd
instead of systemd-timesyncd
.)
But, to come back to your original question:
Assume I have a wrist watch that looses 1 second a month
That's a 0.39 ppm wrist watch. You don't have a 0.39 ppm wrist watch; for such applications, 15 ppm oscillators are more the order in which one moves.
< 1 ppm is oven-controlled oscillator domain, not wristwatch domain, for power reasons. Technically, when you need such precision for a compute/communication system, and it's not underground or to be deployed above 10 km, or in a war zone where that might be disabled, you'd go for a GPS receiver instead. These are commonly available with a Pulse-Per-Second output, and you can read the time at the last pulse from the NMEA strings read from the serial port of the receiver.
Now, you might find yourself in a submarine without access to the sky (but to FT-8? OK!) and need a good clock and time source. Then you'd use a good oven-controlled oscillator to generate e.g. a 2²⁰ Hz clock, or even an atomic clock. You count the seconds according to that clock, and whenever someone whose clock you trust comes by (i.e., someone with a GPS with an OCXO in holdover, your wristwatch's 15ppm paired with the natural 1s resolution is so bad that you stand a fair chance to make things worse, not better), you use a (very slow) control loop to adjust your clock. That way, you train it to be as true as it can long-term be to "real" time.
Is there a program for Linux that allows one to manually sync the computer time to a watch ?
You could write your own few python lines of Python or C or C++ code with OpenCV2 to extract the digits from a picture of your digital wristwatch, and set the time according to that; OpenCV can instead of reading a picture file simply use a webcam, as well.
On a less automated notion, what's wrong with looking at your watch, noticing it's 13:25:03, typing timedatectl set-time "2022-05-24 13:26:00"
and hitting enter exactly when that time actually happens? That's terrible in terms of accuracy, but low-effort.