问题描述
有两个板子通过网口连接,一个板子可以连接外网,另一个板子不能连接外网,需要将两台机器的时间同步,以免后续ROS收发消息时时间戳不准确.
解决方法:chrony服务时间同步
提前准备工作:
需要确认两个板子互相可以ping通。假设有网的板子A ip是192.168.41.3,没有网的B ip是192.168.41.1。在A上 ping 192.168.41.3没有问题,反之亦然.
正文
主板A上的配置(作为NTP服务器)
-
安装
**chrony**
:
sudo apt-get install chrony
2.编辑 chrony
** 配置文件**:
编辑 /etc/chrony/chrony.conf
文件,将主板A配置为NTP服务器。
sudo vim /etc/chrony/chrony.conf
确保以下行存在并取消注释,或者添加以下行:
allow 192.168.41.0/24 # 允许来自此网络的客户端连接
确保以下行存在,以便 chrony
同步时间:
server pool.ntp.org iburst
保存并退出编辑器。
3.重启 chrony
** 服务**:
sudo systemctl restart chrony
4.验证 chrony
** 是否正常工作**:
chronyc tracking chronyc sources
主板B上的配置(作为NTP客户端)
-
安装
**chrony**
:
sudo apt-get install chrony
2.编辑 chrony
** 配置文件**:
编辑 /etc/chrony/chrony.conf
文件,将主板A配置为NTP服务器。
sudo nano /etc/chrony/chrony.conf
注释掉或删除默认的服务器配置,并添加主板A的IP地址作为NTP服务器。例如:
server 192.18.41.3 iburst
保存并退出编辑器。
3.重启 chrony
** 服务**:
sudo systemctl restart chrony
4.验证时间同步:
chronyc tracking chronyc sources
验证和测试
-
在主板B上验证时间同步:
chronyc tracking chronyc sources
这些命令会显示主板B是否正在从主板A同步时间。
2.手动触发时间同步(可选):
如果需要,可以手动触发时间同步:
sudo chronyc -a makestep
完整配置示例
主板A (/etc/chrony/chrony.conf
):
# Allow NTP client access from the local network.
allow 192.168.41.0/24
# Use public servers from the pool.ntp.org project.
server pool.ntp.org iburst
主板B (/etc/chrony/chrony.conf
):
# Use mainboard A as NTP server.
server 192.18.41.3 iburst
通过以上步骤,你可以在一个能连接外网的主板和一个不能连接外网的主板之间使用 chrony
服务实现时间同步。这样,主板B将通过主板A同步时间,确保两台主板的时间保持一致。
补充:B上没有网,无法apt安装deb包怎么办?
确认需要下载的 .deb
文件版本并直接下载 chrony
的 .deb
文件可以通过以下步骤完成:
步骤1:确认需要的版本
-
检查系统版本:
-
首先,确认你的Ubuntu版本,以确保下载的
.deb
文件与系统兼容。可以使用以下命令:lsb_release -a
-
找到合适的
chrony
** 版本**: -
使用Ubuntu包查询网站(如 packages.ubuntu.com)找到与你的Ubuntu版本兼容的
chrony
版本。选择合适的chrony
版本,记下其下载链接。
步骤2:直接下载 .deb
文件
-
下载
chrony
** 的 ****.deb**
** 文件**:
-
使用
wget
或curl
命令直接下载chrony
的.deb
文件。例如,如果你在packages.ubuntu.com
网站上找到适合的chrony
版本,可以使用以下命令下载:
wget http://archive.ubuntu.com/ubuntu/pool/main/c/chrony/chrony_4.2-2ubuntu2_amd64.deb
请根据实际的 chrony
版本和下载链接进行调整。
步骤3:安装 .deb
文件
-
使用
dpkg
** 命令安装 ****chrony**
:下载完成后,使用dpkg
命令安装chrony
的.deb
文件:
sudo dpkg -i chrony_4.2-2ubuntu2_amd64.deb
如果遇到依赖性问题,可以运行以下命令来解决:
sudo apt-get install -f
示例流程
假设你已经确认你的Ubuntu版本是20.04,并且你找到适合的 chrony
版本为 chrony_4.2-2ubuntu2
:
-
确认系统版本:
lsb_release -a
2. 下载 chrony
的 .deb
文件:
wget http://archive.ubuntu.com/ubuntu/pool/main/c/chrony/chrony_4.2-2ubuntu2_amd64.deb
3.安装 chrony
:
sudo dpkg -i chrony_4.2-2ubuntu2_amd64.deb
4.解决依赖性问题(如果有):
sudo apt-get install -f
通过以上步骤,你可以确认需要的 .deb
文件版本并直接下载和安装 chrony
。如果有任何问题,请提供更多详细信息,以便进一步帮助。
补充2:如果两个板子都有网,如何设置
可以按照上文提到的方法设置没有问题,也可以修改config使用外网的时间服务器,具体如下:
配置 chrony
:
编辑 chrony
配置文件 /etc/chrony/chrony.conf
,添加或修改时间服务器的配置。例如:
server pool.ntp.org iburst
如果在局域网中有自己的 NTP 服务器,可以使用内网 NTP 服务器的地址。
启动并启用 chrony
服务:
sudo systemctl start chrony
sudo systemctl enable chrony
补充3: 两个板子过了一段时间之后又没有对齐了,怎么办
chrony
服务启动后,会自动定期与配置的 NTP 服务器进行时间同步。chrony
会根据网络状况和服务器响应情况,动态调整同步间隔,在 minpoll
和 maxpoll
之间进行调整。
如何验证 chrony
是否正常工作
-
检查
chrony
** 服务状态**:可以使用以下命令检查chrony
服务的状态:
sudo systemctl status chrony
如果服务正在运行,你会看到类似如下的输出:
● chrony.service - chrony, an NTP client/server Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2024-07-03 12:34:56 UTC; 1h 23min ago
2.查看时间同步状态:
可以使用 chronyc
工具查看当前时间同步状态:
chronyc tracking
这个命令会显示时间同步的详细信息,例如偏移量、频率偏差等。
Reference ID : 192.18.41.3 (your-ntp-server)
Stratum : 3
Ref time (UTC) : Tue Jul 3 12:34:56 2024
System time : 0.000000012 seconds fast of NTP time
Last offset : -0.000000001 seconds
RMS offset : 0.000000002 seconds Frequency : 1.000 ppm fast Residual freq : 0.000 ppm
Skew : 0.012 ppm
Root delay : 0.000012 seconds
Root dispersion : 0.000001 seconds
Update interval : 16.0 seconds
Leap status : Normal
3.查看 NTP 源状态:
可以使用 chronyc sources
命令查看 NTP 源的状态:
chronyc sources
这个命令会显示当前配置的 NTP 服务器列表及其状态:
210 Number of sources = 1 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined, '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || .- xxx [ yyyy ] +/- zzzz .- xxxx [ yyyy ] +/- zzzz MS Name/IP address Stratum Poll Reach LastRx Last sample ============================================================================== ^* 192.18.41.3 3 6 377 12 +12ns[ +8ns] +/- 32us
配置定期调用
chrony
启动后会自动按照配置的时间间隔进行时间同步,无需额外配置定期调用。默认情况下,chrony
会根据 minpoll
和 maxpoll
的设置,自动调整时间同步的频率。
手动触发时间同步
如果需要手动触发时间同步,可以使用 chronyc makestep
命令:
sudo chronyc -a makestep
这将立即进行时间同步,并调整系统时间。
通过以上步骤,你可以确认 chrony
是否正常工作,并查看当前的时间同步状态。chrony
启动后会自动定期进行时间同步,确保系统时间的准确性。