You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派systemd服务开机启动时tmux任务运行失败如何解决

问题根因

该tmux报错由两个核心原因导致:

  • systemd默认服务未指定运行用户,默认以root身份执行,且未加载普通用户的运行时环境变量,无法匹配pi用户(uid 100)的tmux运行时socket路径
  • /tmp/tmux-100目录为用户登录时由PAM模块自动生成的临时目录,开机启动阶段pi用户未登录时该目录不存在,tmux无法创建默认socket文件
修复方案

1. 调整systemd service配置

编辑你存放的.service文件(默认路径为/etc/systemd/system/下对应文件),替换为如下配置:

[Unit]
Description=Sensor API Service
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=simple
# 指定以pi用户和用户组运行,匹配脚本目录权限
User=pi
Group=pi
# 配置用户运行时环境变量,指定tmux默认socket路径
Environment="XDG_RUNTIME_DIR=/run/user/100"
# 启动前预创建tmux运行目录并设置正确权限
ExecStartPre=/usr/bin/mkdir -p /tmp/tmux-100
ExecStartPre=/usr/bin/chmod 700 /tmp/tmux-100
ExecStartPre=/usr/bin/chown pi:pi /tmp/tmux-100
Restart=always
ExecStart=/usr/bin/bash /home/pi/sensor/update.sh

[Install]
WantedBy=multi-user.target

修改完成后执行以下命令使配置生效:

sudo systemctl daemon-reload
sudo systemctl enable 你的服务文件名.service

如果修改后仍有路径报错,可执行id -u pi查询pi用户的真实uid,将上述配置中所有的100替换为查询到的数值即可。

2. 可选:优化bash脚本的tmux调用

为了彻底避免环境变量异常导致的调用失败,你可以将脚本中所有tmux命令手动指定socket路径,示例如下:

# 原tmux命令
tmux new -d -s $session 'python3 app.py'
# 修改为指定socket路径
tmux -S /tmp/tmux-100/default new -d -s $session 'python3 app.py'

kill-session、has-session等所有tmux相关命令都做相同修改即可。

内容的提问来源于stack exchange,提问作者Aensland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:24:05