InstaBox虚拟机用户会话时区与进程时间
InstaBox 虚拟机运维笔记:用户会话、时区与进程时间排查
一、w 显示用户数与列表不一致
现象
w 头部显示 4 users,下方只列出一条 pts/2 会话。
原因
- InstaBox 云虚拟机通过 SSH 网关接入,配合 systemd-logind 管理会话。
- 之前断开的 SSH 连接未被 logind 及时回收,形成残留(幽灵)会话,被计入人数统计,但不出现在
w明细中。 w头部计数与明细列表可能来自不同统计源,在网关代理 + systemd 环境下会暂时不一致。CLASS为manager的 session 是用户级systemd --user实例,不计入w的 users。
排查命令
loginctl list-sessions # 查看 systemd 侧所有会话
loginctl show-session <ID> # 查看单个会话状态(State=closing / Active=no 即为残留)
who # 查看真实登录记录
ps aux | grep -E "sshd|pts" # 检查残留 sshd/pts 进程解决方案
systemctl restart systemd-logind- 强制 logind 重新扫描并丢弃无效会话。
- 不会断开当前 SSH 连接,纯 SSH 环境无副作用。
- 执行后
w、who、loginctl三者一致。
正常状态基准
loginctl应显示 2 个 session:1 个CLASS user(真实登录)+ 1 个CLASS manager(用户级 systemd 实例)。w与who均只显示当前 1 条登录。
二、系统时区确认
结论
InstaBox 虚拟机默认运行在 UTC 时区,date、uptime、ps lstart 均按 UTC 显示。
确认命令
timedatectl
date +"%Z %z"改为北京时间
timedatectl set-timezone Asia/Shanghai- 临时查看北京时间:
TZ='Asia/Shanghai' date - 修改后所有时间显示(
date/uptime/ps lstart)统一为北京时间,无需手动 +8 换算。
三、时间换算与进程时间排查
UTC 与北京时间换算规则
北京时间 = UTC + 8 小时。
查询进程启动时间
pgrep -f "python3 -m http.server 8080" # 获取 PID
ps -p <PID> -o lstart= # 查看启动时间(跟随系统时区)查询开机/运行时长
uptime开机时间 = 当前系统时间 − 已运行时长。
本次实例时间线(北京时间)
| 事件 | 北京时间 |
|---|---|
| 开机/重启 | 2026-11-12 约 05:09 |
python3 -m http.server 8080 启动 | 2026-11-12 06:32:13 |
| 查询时当前时间 | 2026-11-12 08:55 |
四、核心要点速查
| 问题 | 命令 / 结论 |
|---|---|
w 人数虚高 | systemctl restart systemd-logind |
| 查看真实登录 | who |
| 查看 systemd 会话 | loginctl list-sessions |
| 确认时区 | timedatectl |
| 改北京时间 | timedatectl set-timezone Asia/Shanghai |
| 查进程启动时间 | ps -p <PID> -o lstart= |
| 查开机时长 | uptime |
| UTC 转北京时间 | +8 小时 |