260210-MongoDBHA-MongoDB集群-重置绑定关系-(Replica Set)副本集集群搭建

这是一个涉及数据库运维的操作,需要谨慎处理。

MongoDB 集群配置删除与重新绑定

1. 理解 MongoDB 集群配置存储位置

MongoDB 集群配置主要存储在 Config Servers 中:

  • Config Database (plain复制 config): 包含分片集群的元数据
  • Local Database: 每个节点存储的副本集配置

2. 删除集群配置的方法

场景 A: 完全重置分片集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 1. 停止所有 mongos 路由进程
killall mongos # 或使用 systemctl stop mongos

# 2. 停止所有分片 mongod 实例
# 在每个分片节点上执行
killall mongod

# 3. 停止 Config Server 副本集
# 在所有 config server 节点上执行
killall mongod

# 4. 清除 Config Server 数据目录(⚠️ 危险操作)
# 假设数据目录为 /data/configdb
rm -rf /data/configdb/*

# 5. 重新初始化 Config Server 副本集
mongod --configsvr --replSet configRS --dbpath /data/configdb --port 27019

# 连接主节点初始化
rs.initiate({
_id: "configRS",
configsvr: true,
members: [
{ _id: 0, host: "cfg1.example.com:27019" },
{ _id: 1, host: "cfg2.example.com:27019" },
{ _id: 2, host: "cfg3.example.com:27019" }
]
})

场景 B: 仅移除分片(保留集群框架)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 连接到 mongos
mongo--
host
mongos.example.com--
port
27017

// 1. 查看当前分片
sh.status()

// 2. 移除分片(会迁移数据)
use
admin
db.runCommand({removeShard: "shard0000"})

// 3. 检查移除进度,直到状态为 "completed"
db.runCommand({removeShard: "shard0000"})

// 4. 如果需要强制移除(数据已备份)
db.runCommand({removeShard: "shard0000", drop: true})

场景 C: 重置副本集配置(非分片集群)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 连接到副本集成员
mongo--
host
mongod.example.com--
port
27017

// 1. 查看当前配置
rs.conf()

// 2. 强制重新配置(适用于节点变更)
rs.reconfig({
_id: "myReplicaSet",
members: [
{_id: 0, host: "newhost1:27017"},
{_id: 1, host: "newhost2:27017"},
{_id: 2, host: "newhost3:27017"}
]
}, {force: true}) // force: true 用于强制重新配置

// 3. 或者完全重置(先删除 local 数据库的配置)
use
local
db.system.replset.remove({}) // ⚠️ 仅在确定要重置时执行
// 然后重启 mongod,重新执行 rs.initiate()

3. 重新绑定新配置

步骤 1: 重新配置 Config Server

1
2
3
4
5
6
7
8
9
10
// 初始化新的 Config Server 副本集
rs.initiate({
_id: "configRS",
configsvr: true,
members: [
{_id: 0, host: "new-cfg1:27019", priority: 2},
{_id: 1, host: "new-cfg2:27019"},
{_id: 2, host: "new-cfg3:27019", arbiterOnly: true}
]
})

步骤 2: 启动 mongos 并配置分片

1
2
# 启动 mongos,指向新的 config server
mongos --configdb configRS/new-cfg1:27019,new-cfg2:27019,new-cfg3:27019 --port 27017
1
2
3
4
5
6
7
8
9
// 连接到 mongos 添加分片
sh.addShard("shardRS1/shard1-node1:27018,shard1-node2:27018")
sh.addShard("shardRS2/shard2-node1:27018,shard2-node2:27018")

// 启用数据库分片
sh.enableSharding("myDatabase")

// 对集合进行分片
sh.shardCollection("myDatabase.myCollection", {shardKey: 1})

4. 关键注意事项

操作 风险等级 说明
删除 Config Server 数据 🔴 极高 会丢失所有分片元数据
强制 rs.reconfig 🟡 中等 可能导致脑裂
removeShard 🟢 较低 数据会自动迁移
停止 mongos 🟢 低 仅影响路由,不丢数据

5. 安全操作建议

1
2
3
4
# 操作前务必备份
mongodump --host configRS/cfg1:27019 --db config --out /backup/config_$(date +%Y%m%d)

# 或者使用文件系统快照(如果使用 WiredTiger)

6. 常见问题排查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 检查 Config Server 状态
use
admin
db.runCommand({getShardMap: 1})

// 查看分片连接状态
sh.status()

// 检查 balancer 状态
sh.getBalancerState()

// 如果配置不一致,强制刷新
use
admin
db.adminCommand({flushRouterConfig: 1})

⚠️ 重要提醒

  • 在生产环境执行前,务必在测试环境验证
  • 确保有完整的数据备份
  • 操作期间会有服务中断,选择维护窗口执行
  • 如果是云托管 MongoDB (Atlas),请使用提供商的控制台操作,不要手动修改

260311-openclaw-cn部署和使用

openclaw-cn

OpenClaw 中文社区 - 开源免费 AI 助手 | 飞书/钉钉/企业微信/QQ 自动化
https://clawd.org.cn/

1
2
3
4
5
6
7
8
PNPM_HOME
pnpm config set global-bin-dir "C:\Users\Administrator\pnpm"

openclaw-cn@latest
npm config set registry https://registry.npmmirror.com/

npm install --registry=https://registry.npmmirror.com
pnpm add -g openclaw-cn@latest --registry=https://registry.npmmirror.com

配置参数

1
2
3
4
5
openclaw-cn onboard --install-daemon

安装引导完成。仪表盘已使用您的令牌打开;保留该标签页以控制Clawdbot

openclaw-cn gateway --port 18789

Ollama模型配置

1
2
3
4
5
6
7
8
9
10
# 推荐,约4.7GB
ollama pull qwen2.5:7b

echo FROM qwen2.5:7b > Modelfile
echo PARAMETER num_ctx 32768 >> Modelfile

ollama create qwen2.5:7b-32k -f ./Modelfile

# 查看模型列表,确认新模型已出现
ollama list

OpenClaw对接Ollama配置

  1. 按提示进行配置:在向导中,当问到模型提供商时,请严格按照下表进行选择和填写:
配置项 操作/选择 说明
Model/auth provider Custom Provider 选择自定义提供商,拉到列表最底部即可找到。
API Base URL http://127.0.0.1:11434/v1 这是Ollama服务的默认本地地址,末尾的 /v1 必须保留
API Key 任意字符 (如 ollama) Ollama本地服务不验证密钥,但不能留空,随便填一个即可。
Endpoint compatibility OpenAI-compatible 选择与OpenAI兼容的模式,这是Ollama支持的接口类型。
Model ID qwen2.5:7b-32k 输入我们刚刚在Ollama中创建的模型名称,必须完全一致。

配置完成后,如果看到 “Verification successful” 的提示,就说明OpenClaw已成功连接到本地的Ollama模型了。同时,命令行会显示Web
UI的地址(通常是 http://127.0.0.1:18789)和一个访问Token,

1
2
3
4
5
6
7
8
9
Custom Provider

http://127.0.0.1:11434/v1

ollama

OpenAI-compatible

qwen2.5:7b-32k

结合你之前的步骤,你已经有了本地Ollama模型。如果想体验混合架构,可以参考这个思路:

  1. 添加云端模型:通过 openclaw onboard 命令或OpenClaw的Web界面,再次进入模型配置向导。这次选择另一个提供商,比如
    OpenAIClaude或国内的阿里云百炼,并填入你的云端API Key。
  2. 切换使用:配置好后,你就可以在对话中通过指令或界面下拉菜单,自由选择是用本地模型处理文件,还是调用云端模型进行复杂创作了。

Qwen大模型配置参数

1
2
3
https://dashscope.aliyuncs.com/compatible-mode/v1

qwen3.5-plus

260121-Ubuntu生成docker证书

Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结

1. 设置主机名

编辑/etc/hostname,服务器主机名 ubuntu

1
vi /etc/hostname

2. 生成TLS证书

创建证书生成脚本 docker-cert.sh,放置/script目录

1
2
3
sudo mkdir -p /script /data/cert/docker
sudo touch /script/docker-cert.sh
sudo vim /script/docker-cert.sh

docker-cert.sh添加内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

set -e
if [ -z $1 ];then
echo "请输入Docker服务器主机名"
exit 0
fi
HOST=$1
mkdir -p /data/cert/docker
cd /data/cert/docker
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
openssl genrsa -out ca-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key ca-key.pem -out server.csr
# 配置白名单,推荐配置0.0.0.0,允许所有IP连接但只有证书才可以连接成功
# 创建证书时,您需要提供 localhost 作为主题备用名称。您可以通过提供以下附加参数来做到这一点:-ext "SAN:c=DNS:localhost,IP:127.0.0.1"
# echo subjectAltName = DNS:$HOST,IP:0.0.0.0 > extfile.cnf
# echo subjectAltName = DNS:localhost,IP:0.0.0.0 > extfile.cnf
echo subjectAltName = IP:$HOST,IP:0.0.0.0 > extfile.cnf

openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-key.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
rm -v client.csr server.csr
chmod -v 0400 ca-key.pem key.pem ca-key.pem
chmod -v 0444 ca.pem server-key.pem cert.pem

执行 docker-cert.sh 脚本,生成证书放置 /data/cert/docker 目录中

1
2
3
4
5
# ubuntu是服务器的主机名
sh /script/docker-cert.sh ubuntu
sh /script/docker-cert.sh VM-12-雷赛.电机.PR模式.配置-centos (密码: ubuntu666)
sh /script/docker-cert.sh ubuntu (密码: ubuntu666)
sh /script/docker-cert.sh VM-12-4-ubuntu (密码: ubuntu666)

按照提示输入相关信息,密码一致就行,其他信息可留空,等脚本指定完成之后,可在 /data/cert/docker 目录查看到生成的证书。

Docker 只接受「未加密的私钥」

你给的 .key 文件是 RSA 加密私钥(文件头里能看到 —–BEGIN RSA PRIVATE KEY—– 或 Proc-Type: 4,ENCRYPTED),启动时 dockerd
要求你输入密码,但它跑在 systemd 里没人交互,于是读密钥失败 → TLS 配置无效 → dockerd 直接退出。
一句话结论
私钥被加密了,Docker 不会解密,必须换成“无密码”的私钥。

如果私钥仍带密码,先按前面说的去密码:

1
2
3
sudo openssl rsa -in server-key.pem -out server-key-clear.pem
sudo mv server-key-clear.pem server-key.pem
sudo chmod 600 server-key.pem

证书生成过程问题解决

OpenSSL 报错写得很清楚:

1
bad ip address … value=ubuntu

你在 extfile.cnf 里把 主机名ubuntu)直接写进了 IP: 字段,而 IP: 后面必须是纯 IPv4/IPv6 地址,不能是字符串域名或主机名。
改成 DNS:ubuntu 或者干脆去掉域名,只保留合法 IP 即可。

修正扩展文件

1
2
3
cat > extfile.cnf <<EOF
subjectAltName = DNS:ubuntu,IP:127.0.0.1,IP:10.0.0.0/8
EOF

如果你只想让任何地址都能连,也可以最简写:

1
echo "subjectAltName = IP:0.0.0.0" > extfile.cnf

重新签发

1
2
3
4
openssl x509 -req -in server.csr \
-CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out server-cert.pem -days 3650 -sha256 \
-extfile extfile.cnf

验证

1
openssl x509 -in server-cert.pem -text -noout | grep -A1 "Subject Alternative Name"

应看到:

1
2
X509v3 Subject Alternative Name:
DNS:ubuntu, IP:127.0.0.1, IP:0.0.0.0/8

不再报错即可。

查看生成后的证书

img

3. 配置Docker启用TLS

1
2
sudo cat /usr/lib/systemd/system/docker.service
sudo vim /usr/lib/systemd/system/docker.service

在ExecStart属性后追加

1
2
3
4
--tlsverify --tlscacert=/data/cert/docker/ca.pem  \
--tlscert=/data/cert/docker/server-cert.pem \
--tlskey=/data/cert/docker/server-key.pem \
-H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock
1
--tlsverify --tlscacert=/data/cert/docker/ca.pem --tlscert=/data/cert/docker/server-cert.pem --tlskey=/data/cert/docker/server-key.pem -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock 

img

重新加载docker配置后重启

1
2
3
4
5
6
7
8
9
10
11
12
sudo systemctl daemon-reload 
sudo systemctl restart docker

sudo journalctl -u docker.service -n 50

# 检查是否加密 如果提示 Enter pass phrase,就说明被加密了。
sudo openssl rsa -in /data/cert/docker/ca-key.pem -check -noout

调试验证
>> /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/data/cert/docker/ca.pem --tlscert=/data/cert/docker/server-cert.pem --tlskey=/data/cert/docker/server-key.pem -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock

sudo systemctl daemon-reload && sudo systemctl restart docker

查看2376端口是否启动

1
netstat -nltp | grep 2376

img

本地连接测试Docker API是否可用

  • 没有指定证书访问测试
1
2
curl https://ubuntu:2376/info 
curl https://127.0.0.1:2376/info
  • 指定证书访问测试
1
2
3
4
5
6
7
curl https://ubuntu:2376/info --cert /data/cert/docker/cert.pem --key /data/cert/docker/key.pem --cacert /data/cert/docker/ca.pem

curl https://127.0.0.1:2376/info --cert /data/cert/docker/cert.pem --key /data/cert/docker/key.pem --cacert /data/cert/docker/ca.pem

curl https://ubuntu:2376/info --cert /data/cert/docker/cert.pem --key /data/cert/docker/key.pem --cacert /data/cert/docker/ca.pem

https://ubuntu:2376

4. IDEA配置

将客户端所需的ca.pem、cert.pem、key.pem3个密钥文件从服务器下载到本地

img

IDEA连接Docker配置修改

img

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<!--执行mvn package,即执行 mvn clean package docker:build-->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>

<configuration>
<!-- 镜像名称 -->
<imageName>${project.artifactId}</imageName>
<!-- 指定标签 -->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 基础镜像-->
<baseImage>openjdk:8-jdk-alpine</baseImage>

<!-- 切换到容器工作目录-->
<workdir>/</workdir>

<entryPoint>["java","-jar","${project.build.finalName}.jar"]</entryPoint>

<!-- 指定远程 Docker API地址 -->
<dockerHost>https://ubuntu:2376</dockerHost>
<!-- 指定tls证书的目录 -->
<dockerCertPath>C:\certs\docker\ubuntu</dockerCertPath>

<!-- 复制 jar包到docker容器指定目录-->
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录 -->
<directory>${project.build.directory}</directory>
<!-- 用于指定需要复制的文件,${project.build.finalName}.jar就是打包后的target目录下的jar包名称 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

260106-wincc采集数据-监控OMS-连接是否有效

一句话总结(ConnectionState)

WinCC 自带“@连接名@ConnectionState”系统变量,
0=离线 1=在线;
把它做在画面上或脚本里,就能第一时间知道设备是否掉线,
比盯着过程值可靠得多。

添加变量

确认状态 ConnectionStateEx

wincc oms+采集数据,采集通道连接如何触发重新连接

ConnectionEstablishMode

@ConnectionEstablishMode 并不是在 WinCC 的“变量管理”里手动建出来的普通变量,
而是通道在创建时自动生成的“系统变量”。
想找到它,只要打开:
WinCC 资源管理器 → 变量管理 →
展开你正在用的那条 S7 通道(如“OMS+”或“SIMATIC S7-1200/1500”)→
再展开下面的某个“连接”→
右侧窗口里就能看到名字以“@”开头的系统变量列表,
其中就有 @ConnectionEstablishMode(数据类型 DWORD,默认值 1)[29^]。
如果列表里没看到,把列宽拉大一点或把“系统变量”筛选打开即可。

在 WinCC 里,OMS+ 通道本身没有“一键重连”按钮,想让 S7-1200/1500 的采集通道在断线后重新握手,有两种办法——“让它自己连”或“手动踢它一脚”。
自动重连(推荐)
把系统变量 @ConnectionEstablishMode 置为 1(缺省就是 1),通道会每 4 s 自动尝试重建连接,无需干预 。
手动触发重连
① 强制断开:把 @ForceConnectionState 先写 0,已建立的连接会立即断开;
② 再次建立:再把 @ForceConnectionState 写 1,通道立即按组态参数重新连接 。
如果同时想换 IP 或访问点,可先把新地址写入 @AlternateConnectionAddress,再把 @ForceConnectionAddress 切换一次
0→1,也能达到“断开-重连”的效果 。
脚本里一般用 C 动作或 VBS 给这几个内部变量赋新值即可,触发一次执行一次重连流程

251110-BIOS-Keypress-BIOSKeyPress-IPC-工控机重装系统按键

BIOS按键配置

品牌 BIOS按键
ZYR中亿睿 F11
Lenovo F2
联想电脑 F12
Dell台式机

Ubuntu 系统安装openssh-server

1
2
3
4
5
sudo apt update

sudo apt install openssh-server -y

ifconfig

ubuntu 20.04如何查看当前屏幕的-当前登录会话里直接看变量-当前登录会话里直接看变量(echo $DISPLAY)

1
echo $DISPLAY

在 Ubuntu 20.04 里,“当前屏幕的 DISPLAY” 就是 X11 的 DISPLAY 变量,格式通常是 :0、:1、:0.0 等。
下面给出几种最常用、最兼容的办法,无需安装额外软件即可拿到结果。

一句话总结
只要你在图形界面下,echo $DISPLAY 就是当前屏幕的 DISPLAY;
ssh 进来就用 loginctl show-user $USER -p Display –value,百试百灵。

Unit.Service.配置变量Environment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
Description=app
After=mongod.service
StartLimitIntervalSec=0

[Service]
ExecStart=/usr/local/java -javaagent:/opt/atlassian/jira/atlassian-agent.jar -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08 -XX:-OmitStackTraceInFastThrow -Xms10G -Xmx10G -XX:+PrintGC -Xloggc:/opt/data/app/gc/gc.log -XX:MetaspaceSize=1G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/data/app/gc/ -jar /opt/data/app/lib/app.jar --spring.config.location=/opt/data/app/lib/application.properties
User=root
Group=root
Environment="DISPLAY=:0" # 需配置X11协议规则
PrivateTmp=true
LimitNOFILE=65536
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target
Alias=app.service

在 Ubuntu 系统中,磁盘检查(fsck)通常在启动时自动运行,以确保文件系统的完整性。

如果你希望取消或调整磁盘检查的行为,可以通过以下几种方法来实现:

1. 修改 /etc/fstab 文件

/etc/fstab 文件定义了文件系统的挂载选项,包括是否在启动时进行磁盘检查。你可以通过修改这个文件来取消磁盘检查。

  1. 打开 /etc/fstab 文件

    1
    sudo vim /etc/fstab
  2. 找到需要修改的文件系统条目: 每一行代表一个文件系统条目,通常包含以下字段:

    1
    <file system> <mount point>   <type>  <options>       <dump>  <pass>

其中 `` 字段(第六个字段)定义了启动时是否进行磁盘检查:

  • 0:不进行磁盘检查。
  • 1:在启动时进行磁盘检查(通常用于根文件系统)。
  • 2:在启动时进行磁盘检查(通常用于其他文件系统)。
  1. **将 字段设置为 `0`**: 将需要取消磁盘检查的文件系统条目的 字段设置为 0。例如:
    1
    UUID=your-uuid /               ext4    errors=remount-ro 0       0
  2. 保存并退出: 保存文件并退出编辑器。

Ubuntu系统分盘建议

分区名称 分区格式 类型 大小 描述
swap 主分区 swap area 18G 交换空间,类似Windows下的虚拟内存。
空间大小,一般是等于电脑内存;如果容量足够,可以等于物理内存的2倍。
比如16GB内存,就可以给固态硬盘32GB的空间,太小也不好,太大也没用。博主这里配的是18G(运行内存16G+2G)。
efi 逻辑分区 efi system partition 2G 引导分区。空间大小为2G。
/ 逻辑分区 ext4日志文件系统 40G 根目录,分配40G。
/usr 逻辑分区 ext4日志文件系统 50G linux系统存放软件的地方。
/usr/local 逻辑分区 ext4日志文件系统 40G 承载用户安装的软件。(可选配)
/usr/local 逻辑分区 ext4日志文件系统 300G 相当于个人文件夹,用户存储数据,类似Windows下的User。
建议分配稍微大点,因为以后自己的图片、视频、下载内容基本都在这里面。博主安排了500G。

1762756042707

251110-BIOS-IPC-工控机重装按键

ubuntu 20.04如何查看当前屏幕的-当前登录会话里直接看变量-当前登录会话里直接看变量(echo $DISPLAY)

1
echo $DISPLAY

在 Ubuntu 20.04 里,“当前屏幕的 DISPLAY” 就是 X11 的 DISPLAY 变量,格式通常是 :0、:1、:0.0 等。
下面给出几种最常用、最兼容的办法,无需安装额外软件即可拿到结果。

一句话总结
只要你在图形界面下,echo $DISPLAY 就是当前屏幕的 DISPLAY;
ssh 进来就用 loginctl show-user $USER -p Display –value,百试百灵。

Unit.Service.配置变量Environment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
Description=app
After=mongod.service
StartLimitIntervalSec=0

[Service]
ExecStart=/usr/local/java -javaagent:/opt/atlassian/jira/atlassian-agent.jar -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08 -XX:-OmitStackTraceInFastThrow -Xms10G -Xmx10G -XX:+PrintGC -Xloggc:/opt/data/app/gc/gc.log -XX:MetaspaceSize=1G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/data/app/gc/ -jar /opt/data/app/lib/app.jar --spring.config.location=/opt/data/app/lib/application.properties
User=root
Group=root
Environment="DISPLAY=:0" # 需配置X11协议规则
PrivateTmp=true
LimitNOFILE=65536
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target
Alias=app.service

251111-ubuntu20.04-chrome浏览器禁用更新

方法一:使用 apt-mark 锁定 Chrome 包(推荐)

1
sudo apt-mark hold google-chrome-stable

恢复更新

1
sudo apt-mark unhold google-chrome-stable

禁用 Google Chrome 的软件源

1
sudo vim /etc/apt/sources.list.d/google-chrome.list

在每一行前加上 # 注释掉内容,例如:

1
# deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

保存并退出,然后运行:

1
sudo apt update

✅ 总结

方法 效果 推荐程度
apt-mark hold google-chrome-stable 阻止 Chrome 更新,简单有效 ⭐⭐⭐⭐
注释掉 google-chrome.list 完全关闭 Chrome 更新源 ⭐⭐⭐
禁用系统自动更新 影响整个系统,不推荐

如无特殊需求,推荐使用 apt-mark hold 方法,安全、可控、可随时恢复。

Chrome启动全屏

sudo /usr/bin/google-chrome-stable –password-store=basic –disable-background-networking
–kiosk http://127.0.0.1/hmi/r26o –disable-pinch –disable-translate –no-sandbox

–no-sandbox 会关闭 Chrome 的“沙箱”保护机制
一句话:–no-sandbox 是“拆掉保险杠”的调试开关,能不用就别用。

–disable-pinch
禁用触控板/触摸屏上的“捏合缩放”(pinch-to-zoom)手势。

–disable-translate
彻底关掉内置翻译功能(Google Translate 提示条)

251112-谷歌chrome-需要认证:您登录计算机时,您的登录密钥环未被解锁

Chrome需要认证:您登录计算机时,您的登录密钥环未被解锁。

1762913417134

你遇到的这个弹窗:

“需要认证:您登录计算机时,您的登录密钥环未被解锁。”

是因为 Chrome(或 Chromium)试图读取保存的密码,但你的 GNOME Keyring(或 KDE Wallet) 没有自动解锁。


🔍 为什么会这样?

  • 你设置了 自动登录(如树莓派、Ubuntu 自动登录)。
  • 系统登录时没有输入密码,所以密钥环没有解锁
  • Chrome 启动时尝试访问密钥环 → 弹出解锁提示。

操作方法

安装工具

1
2
3
4
5
sudo apt install seahorse  # 安装图形化管理工具(可选)
seahorse

1. 找到 **“登录”** 密钥环,右键 → **“更改密码”**。
2. 输入旧密码(是你用户密码),**新密码留空** → 确认 → 会提示“不安全” → 确认即可。

确认工具->密码和密钥

1762914475634

更改密钥密码

1762914454683



✅ 解决方法(任选其一)


✅ 方法 1:禁用密钥环(最简单,适合 kiosk、展示机)

如果你只是用 Chrome 做展示、 kiosk、HMI,不需要保存密码,直接禁用密钥环。

  1. 打开终端,运行:

    1
    sudo apt install seahorse  # 安装图形化管理工具(可选)
  2. 打开“密码和密钥”(Passwords and Keys):

    1
    seahorse
  3. 找到 “登录” 密钥环,右键 → “更改密码”

  4. 输入旧密码(是你用户密码),新密码留空 → 确认 → 会提示“不安全” → 确认即可。

这样密钥环就是解锁状态,再也不会弹窗。


✅ 方法 2:让密钥环自动解锁(适合需要保存密码)

  1. 确保你设置了用户密码(不能是自动登录无密码)。
  2. 设置你的登录密码密钥环密码一致。
  3. 系统登录时会自动解锁密钥环,不会再弹窗

✅ 方法 3:Chrome 启动时禁用密钥环(命令行)

你已经用了 --password-store=basic,这本来是禁用密钥环的,但如果还弹窗,说明:

  • 你可能用的是 Snap 或 Flatpak 版 Chrome,它忽略这个参数。
  • 或者系统默认密钥环是 KDE Wallet

✅ 终极方案(kiosk 专用)

如果你只是做展示、HMI、全屏播放,不需要保存任何密码直接用方法 1 把密钥环密码设为空即可。


✅ 总结

场景 推荐方法
展示机、 kiosk、HMI 方法 1:密钥环密码设为空
需要保存密码 方法 2:登录密码和密钥环一致
命令行无效 方法 3:确认不是 Snap 版 Chrome

如你不确定是哪种 Chrome,运行:

1
which google-chrome-stable

如果输出是 /snap/...,那就是 Snap 版,建议卸载后装 .deb 版:

1
sudo apt install google-chrome-stable

251117-Ntp-Ubuntu时间同步配置-自动同步网络时间(NTP)

251117-Ntp-Ubuntu时间同步配置-自动同步网络时间(NTP)

systemd-timesyncd和chrony区别

1
2
3
4
5
6
7
举例:

- 笔记本频繁休眠/唤醒 → chrony 能在联网后 3~5 秒完成同步,timesyncd 可能要等下一次周期或手动重启服务
- 内网需要自建 NTP 服务器 → timesyncd 做不到;chrony 加一行 `allow 192.168.0.0/24`

因此,**“客户端-only + 极简配置”** 选 systemd-timesyncd;
**其余所有场景**(尤其云、虚拟化、不稳定网络、服务器角色)直接上chrony

Ubuntu/Linux 服务器上调整系统时间(日期和时间)可以通过以下命令实现,具体分为 手动设置自动同步
(NTP)两种方式:

查看当前系统时间

1
date

或查看详细时区信息:

1
timedatectl

手动设置时间

(1) 使用 date 命令(临时生效,重启可能失效)

1
sudo date -s "2024-05-21 15:30:00"

或:

1
2
sudo date +%T -s "15:30:00"   # 仅修改时间
sudo date +%Y%m%d -s "20240521" # 仅修改日期

(2) 使用 timedatectl(推荐,永久生效)

1
sudo timedatectl set-time "2024-05-21 15:30:00"

或分别设置日期和时间:

1
2
sudo timedatectl set-time 15:30:00
sudo timedatectl set-time 2024-05-21

3. 设置时区

(1) 查看可用时区

1
timedatectl list-timezones

或搜索特定时区(如上海):

1
timedatectl list-timezones | grep Shanghai

(2) 修改时区

1
sudo timedatectl set-timezone Asia/Shanghai

或使用传统方式:

1
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4. 自动同步网络时间(NTP)

1
sudo timedatectl set-ntp true

检查状态:

1
timedatectl status

(2) 手动强制同步

如果 NTP 未自动同步,可以手动触发:

1
sudo systemctl restart systemd-timesyncd

或使用 ntpdate(需安装):

1
2
sudo apt install ntpdate -y
sudo ntpdate pool.ntp.org

5. 硬件时间(BIOS时间)同步

1
sudo hwclock --systohc

查看硬件时间:

1
sudo hwclock --show

总结

需求 命令
查看时间 date 或 timedatectl
手动改时间 sudo timedatectl set-time “YYYY-MM-DD HH:MM:SS”
修改时区 sudo timedatectl set-timezone Asia/Shanghai
启用 NTP 自动同步 sudo timedatectl set-ntp true
强制同步 NTP sudo ntpdate pool.ntp.org
同步硬件时间 sudo hwclock –systohc
1
2
3
4
⚠️ 注意:

在 生产服务器 上修改时间可能影响日志、数据库、计划任务等,建议在维护窗口操作。
如果服务器运行 Kubernetes/Docker,还需同步容器时间。