2025年12月14日
1.systemctl的文件,user/lib/systemd/system下或/etc/systemd/system
2.创建文件
查看systemctl下所有运行进程
systemctl list-units --type=service --state=running #systemctl list-units列出所有服务单元,type类型service , state状态正在运行
linux中systemctl新加个devicemanager.service的服务
systemctl daemon-reload
npx pm2 delete devstart
3.lsof -i :13000 #13000端口的进程信息
[root@MiWiFi-RA70-srv log]# lsof -i :5234 #检查了5234端口的进程确实35680
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dotnet 35680 root 348u IPv4 1549512 0t0 TCP *:eenet (LISTEN)
补充:lsof -p <PID> #查看进程打开的文件(如果是项目的这个文件可能比较多)
lsof 文件地址 #查看哪些进程在使用这个文件
4. ps aux | grep nohup#nohup正在运行的进程
5..Include(m => m.SubModules)其中SubModules还有Avatar和Trains两个集合怎么加载进来,使用ThenInclude吗?
.Include(m => m.SubModules).ThenInlcue(m => m.a)
.Include(m => m.SubModules).ThenInlcue(m => m.b)
6.
var moduleEntity = await DatabaseService.Modules.Where(m => m.Id == req.Id).Include().SingleAsync();
moduleEntity.Name = req.Name;
moduleEntity.Identity = req.Identity;
moduleEntity.Image = _mapper.Map<ProductImage>(req.Image);
moduleEntity.Description = req.Description;
await DatabaseService.SaveChangesAsync();
修改之前moduleEntity.Image已经有值了,再修改会造成外键重复报错,怎么处理?
解:
(1).提前使用DatabaseService.remove删除原来的image
(2).req.Image添加字段Id与原来的moduleEntity.Image的Id,相同,他会自动更新
7.
第三方下载离线离线vsix,visual studio安装
解:
工具目录找vsixinstaller.exe,并打开命令行执行下面命令
VSIXInstaller.exe d:\qt-vsaddin-msvc2022-3.0.1.vsix
8.
多种查看空间的方法
解:
df -h
du -sh 或者 du -sh /path/tpdirectory#在要查询的目录下或后面根目录地址
du -h --max-depth=1 /path #下一级子目录
du -ah --max-depth=1 /path #下一级子目录和下一级子文件
du -h --max-depth=1 /path|sort -rh #改进下一级子目录从大到小,一些老系统可能不支持排序
du -h /path/* # 不仅下一级,包含所有
7.
docker system prune# 删除所有已停止的容器、未被任何容器使用的网络、悬空的镜像和构建缓存
3. 查找大文件 在整个根分区查找 >1G 的文件。 sudo find / -xdev -type f -size +1G -exec ls -lh {} \; 2>/dev/null
8.
/var/local/lib是什么文件夹?
存放由系统管理员或本地软件安装、维护的,在系统重启后需要保留的应用程序库文件和数据。
9.
/var/local/lib占用了26G,过大,怎么处理?
10.
/var/local/lib/docker/overlay2/495ce7a65e576436f44f24c305060979ec6e220eb2ee2bd12c098a29baa120fc
下root目录查看有1.8G,但是进入目录什么也没有
11.sudo chown -R 999:999 /home/mysql_data
12.sudo mv /var/lib/docker/volumes/56a6f816b2fd9e5fc12d87cc346d37514c8d455f58ccd71a86190926c9602f4c/_data/* /home/mysql_data/
13.
# 删除旧的Docker卷(谨慎操作,确保数据已迁移)
sudo docker volume rm <旧卷名>
# 也可以直接删除数据目录(如果卷已删除)
sudo rm -rf /var/lib/docker/volumes/56a6f816b2fd9e5fc12d87cc346d37514c8d455f58ccd71a86190926c9602f4c
14.
配置项 作用 推荐值 配置方法
max_binlog_size 控制单个binlog文件的最大容量。达到此值后,MySQL会创建新文件。 500M - 1G 通过配置文件或SQL命令设置
expire_logs_days 设置binlog文件的保留天数。超过天数的文件会被自动清理。 7 通过配置文件或SQL命令设置
binlog_expire_logs_seconds (MySQL 8.0+) 以秒为单位设置保留时长,优先级高于 expire_logs_days。 604800 (7天) 通过配置文件或SQL命令设置
🔧 配置方法
你可以通过以下两种方式配置,第一种(配置文件法)更适合长期管理。
首选方案:通过配置文件挂载(持久化)
这是最规范的方式,配置可以持久保存,即使容器重建也有效。
第一步:在宿主机上创建并编辑配置文件
bash
# 创建一个用于存放配置的目录
sudo mkdir -p /home/mysql_conf
# 创建并编辑配置文件
sudo vim /home/mysql_conf/my.cnf
第二步:在 my.cnf 文件中添加以下内容
ini
[mysqld]
# 设置单个binlog文件大小为500MB
max_binlog_size = 500M
# 设置binlog文件保留7天 (适用于MySQL 8.0以下版本)
expire_logs_days = 7
# 设置binlog文件保留7天 (适用于MySQL 8.0及以上版本,优先级更高)
binlog_expire_logs_seconds = 604800
对于你使用的 MySQL 8.3.0,主要设置 binlog_expire_logs_seconds 即可。
🔄 MySQL 8.0 及更高版本的重大变化
你需要特别注意,你使用的是 MySQL 8.3.0,这是一个较新的版本。在 MySQL 8.0 中,引入了新的参数 binlog_expire_logs_seconds,它提供了以秒为单位的更精确控制,并逐渐取代 expire_logs_days。
15.
sql
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
如果磁盘空间告急,可以立即执行一次手动清理:
sql
-- 清理3天前的所有binlog
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY);
总结一下,修改为 binlog_expire_logs_seconds = 259200 并重启容器后,你的 MySQL 将只保留最近 3 天的 binlog,配合 500MB 的单文件大小限制,能有效控制磁盘占用。配置完成后,建议再次运行 df -h 监控根分区的空间变化。
bash
# 假设原路径有效,将数据拷贝到新目录
sudo cp -rp /var/lib/docker/volumes/6df30ae7e93b3fbc9431e8bea1cec2fecfacbc84d6bfa73dbed79e8ef2a0c9b0/_data/* /home/emqx/data/ 2>/dev/null || echo "如果原目录已空或不存在,忽略此消息"
停止并删除旧容器
bash
docker stop emqx-broker && docker rm emqx-broker
使用物理卷映射重新运行EMQX容器
bash
docker run -d \
--name emqx-broker \
--restart=always \
-p 1883:1883 \
-p 8083-8084:8083-8084 \
-p 8883:8883 \
-p 18083:18083 \
-v /home/emqx/data:/opt/emqx/data \
-v /home/emqx/log:/opt/emqx/log \
emqx/emqx:5.8.6
关键点:
-v /home/emqx/data:/opt/emqx/data:将物理目录映射到容器内数据目录,替换Docker匿名卷。
-v /home/emqx/log:/opt/emqx/log:将日志目录也映射出来,方便管理和查看。
--restart=always:确保容器自动重启。
📁 操作步骤
在物理磁盘(如 /home 分区)创建目标目录
bash
# 创建数据目录
sudo mkdir -p /home/rabbitmq/data
# 设置为RabbitMQ容器内运行的用户所有(通常是 rabbitmq 用户,UID=1000)
sudo chown -R 1000:1000 /home/rabbitmq/data
备份原Docker卷的数据
在停止容器前,将原有数据复制到新目录。请先确保容器仍在运行。
bash
# 复制原卷数据到新目录(保留文件属性)
sudo cp -rp /var/lib/docker/volumes/rabbitmq_data/_data/* /home/rabbitmq/data/ 2>/dev/null
echo "数据备份完成。如果提示源目录不存在,请先确保容器正在运行。"
停止并删除旧容器
bash
docker stop rabbitmq-server && docker rm rabbitmq-server
使用物理卷映射重新运行RabbitMQ容器
bash
docker run -d \
--name rabbitmq-server \
--restart=always \
-p 5672:5672 \
-p 15672:15672 \
-v /home/rabbitmq/data:/var/lib/rabbitmq \
rabbitmq:4.0-management
关键点:
-v /home/rabbitmq/data:/var/lib/rabbitmq:将物理目录映射到容器内RabbitMQ的数据目录,替换Docker匿名卷。
--restart=always:确保容器自动重启。
16.
正在运行的容器修改为开机自启动
已阅读 8 个网页
您可以通过 docker update 命令,为正在运行的容器设置一个重启策略来实现开机自启动。这是Docker自身提供的官方功能。
简单来说,Docker的服务会在系统启动时运行,然后它根据您为每个容器设置的策略,决定是否启动该容器。您需要做两个关键步骤:
🔧 具体操作步骤
确保Docker服务开机自启动
这是大前提。请运行以下命令:
bash
sudo systemctl enable docker.service
这能保证宿主机重启后,Docker服务本身会自动运行。
bash
# 设置EMQX容器
docker update --restart=unless-stopped emqx-broker
# 设置RabbitMQ容器
docker update --restart=unless-stopped rabbitmq-server
您可以根据需求,将 unless-stopped 替换成下表内的其他策略。
策略 描述 适用场景
no 默认策略,永不自动重启。 临时测试容器。
on-failure[:max-retries] 容器异常退出(非0状态码)时重启。可加 :max-retries 限制最大重试次数。 希望自动恢复意外崩溃的服务。
always 总是重启(无论退出状态),除非容器被手动停止。手动停止后,即使Docker重启,它也不会自动启动。 需要绝对保持运行的服务。
unless-stopped 除非被手动停止,否则总是重启。与 always 的关键区别:即使容器在Docker服务停止前已被手动停止,Docker重启后,它也不会自动启动。 推荐用于大多数生产服务。
注:所有重启策略都只在容器成功运行至少10秒后才生效,以防止启动失败陷入死循环。
✅ 验证设置
设置后,您可以使用以下命令检查配置是否成功:
17.
bash
# 查看容器的重启策略
docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" <容器名>
例如,对 emqx-broker 执行后,应该会输出 unless-stopped。
18.
如果您需要批量设置所有正在运行的容器,可以使用这个命令:
bash
docker update --restart=unless-stopped $(docker ps -q)
总结一下:对于您的 emqx-broker 和 rabbitmq-server,直接执行 docker update --restart=unless-stopped <容器名>,并确保Docker服务已启用自启动即可。这样,下次服务器重启时,这两个容器就会自动启动了。
如果您想了解如何将这些迁移了数据目录的容器配置也写到 docker-compose.yml 文件里进行统一管理,我可以为您提供进一步的指导。
19.
[Unit]
Description=MedicTech Server
After=network.target #启动顺序约束:确保在网络服务启动完成之后再启动此服务,避免因网络未就绪导致服务启动失败。
[Service]
Type=simple #服务类型:默认类型。systemd 会认为主进程(ExecStart 启动的)就是服务的主进程。
User=root #运行身份:以 root 用户权限运行此服务。注意:出于安全考虑,若非必须,建议创建专用低权限用户来运行。
WorkingDirectory=/home/test/MedicTech/server #工作目录:服务启动时的工作路径,影响相对路径的解析。
ExecStart=/home/test/MedicTech/server/MedicTechServer #核心命令:启动服务需要执行的绝对路径命令。
Restart=on-failure #重启策略:仅在进程异常退出(退出码非0)时自动重启。
RestartSec=5s #重启间隔:重启前等待 5 秒,避免频繁重启消耗资源。
StandardOutput=syslog #输出重定向:将服务的标准输出和错误输出都发送到系统日志(syslog)。
StandardError=syslog
SyslogIdentifier=MedicTechServer #日志标识:在系统日志中,该服务的日志条目会以 MedicTechServer 作为标识。
[Install]
WantedBy=multi-user.target #安装目标:当启用服务(systemctl enable)时,会创建一个链接,表示在系统进入多用户命令行模式(非图形界面) 时,需要启动这个服务。
解读
这份 systemd 服务单元文件是为您的 MedicTech 服务器配置的,旨在使其成为一个受系统管理的后台服务。我将为您详细解读每个部分的作用。
✅ 核心功能总结
这份配置文件主要实现了以下几点:
开机自启:一旦被 systemctl enable 启用,系统启动到多用户模式时会自动启动此服务。
异常恢复:服务进程如果意外崩溃(on-failure),系统会在5秒后(RestartSec)自动重启它,提高了可靠性。
日志管理:将服务输出的所有日志整合到了系统日志中,方便使用 journalctl 命令(如 journalctl -u MedicTechServer)进行统一查看和排查问题。
依赖管理:明确了需要在网络可用后启动(After=network.target)。
20.
部署与启用服务:
sudo cp MedicTech服务文件.service /etc/systemd/system/ # 1. 将配置文件复制到 systemd 系统目录
sudo systemctl daemon-reload # 2. 重新加载 systemd 配置
sudo systemctl enable MedicTech服务文件.service # 3. 启用开机自启动
sudo systemctl start MedicTech服务文件.service # 4. 立即启动服务
sudo systemctl status MedicTech服务文件.service # 5. 检查状态和日志
journalctl -u MedicTech服务文件.service -f
安全建议(重要):用户权限:考虑为服务创建一个专用用户(如 medictech),并在 [Service] 部分将 User=root 更改为 User=medictech,同时确保该用户对相关目录有必要的读写权限。这遵循了“最小权限原则”。(这个要坐下实验)
启动失败应该:
sudo systemctl stop MedicTechServer.service
sudo systemctl disable MedicTechServer.service
21.
docker exec -it rabbitmq-server bash# 1. 进入容器
rabbitmqctl list_users# 2. 在容器内运行RabbitMQ管理命令查看用户列表
创建/修改用户并设置权限(如果必要):
在RabbitMQ容器内执行:
rabbitmqctl add_user app_user strongpassword # 创建一个新用户(例如用户名为 app_user,密码为 strongpassword)
rabbitmqctl set_user_tags app_user administrator # 授予管理员权限(根据您的应用需要,也可以只授予特定权限)
rabbitmqctl set_permissions -p / app_user ".*" ".*" ".*" # 设置资源访问权限(vhost 根据实际情况调整,通常是 /)

浙公网安备 33010602011771号