团队博客

解决 FS 时间不正确的记录文档

杜林君  2023-09

如果遇到服务器的时间与北京时间相差八小时(FS 及话单时间也与标准时间相差八小时)

解决方法如下:

第一步:修改 Debian 系统时间

在 Linux 系统中主要的就是使用 tzselect 命令来选择时区。要注意的是 tzselect 只是帮我们把选择的时区显示出来,并未实际生效也就是说它仅仅告诉我们怎样去设置环境变量 TZ。

  • 输入 tzselect(会出来几个大洲的英文名字)
  • 输入相对应的大洲的序号
  • 会显示出相应大洲中国家的英文名字,输入相应的序列号
  • 输入序列号之后会显示出相应国家城市的序列号,输入相应的序列号
  • 输入TZ=‘Asia/Shanghai’这一行命令
  • 输入export TZ这一行命令
  • 输入date命令就可以查看当前的时间

下面补充关于 date 的相关知识点:

一. 时区

  • 查看当前时区:date -R

  • 修改设置时区:

  1. tzselect
  2. timeconfig:仅限于 RedHat Linux 和 CentOS
  3. dpkg-reconfigure tzdata:适用于 Debian
  • 复制相应的时区文件,替换系统时区文件或者创建链接文件 cp
cp /usr/share/coneinfo/$主时区/$次时区 /etc/localtime

在中国可以使用

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

二、时间

  • 查看时间和日期:date

  • 设置时间和日期: 将系统日期设定为 1996 年 6 月 10 日的命令

date -set=“1996-06-10 01:01:01″ //这样可以设置全部时间

第二步:修改 FS 系统时区

修改完 Debian 系统时间,可进入如下目录中编辑 variables.xml 文件

  • vim /usr/local/freeswitch/conf/variables.xml

只需要添加如下一行内容即可

  • <X-PRE-PROCESS cmd="set" data="timezone=Asia/Shanghai">

在 FreeSWITCH 控制台中可以执行如下命令

fsctl sync_clock

第三步:修改 Postgres 数据库时间

如果使用 SQL 数据库改完了 FS 的时间就无需进行其他操作。

如果使用 PG 数据库则需要重新设置数据库时间,步骤如下:

  • su - postgres
  • psql
  • select now(); 执行完上述步骤就可以查看数据库中的时间

执行set time zone 'PRC';重新查询及时生效

要想永久生效的 pgdata 下的 postgresql.conf 配置里修改两项

log_timezone = 'PRC'

timezone = 'PRC'

修改之后重启数据库,命令如下:

/etc/init.d/postgresql restart

第四步:修改 Docker 时间

  • 命令行启动时设定时区
docker run --rm -it -e TZ='Asia/Shanghai' debian bash
  • 将宿主机与容器的时间进行挂载
-v /etc/localtime:/etc/localtime
  • 进入容器内设定时区

进入容器:

docker exec -it name /bin/bash
rm/etc/localtime
ln -s/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
如何写好测试用例