[Unit] # MQTT Broker 常驻守护(Linux 单进程同时监听 TCP 1883 + WebSocket 8083) # 安装: # cp docs/deploy/iot-broker.service /etc/systemd/system/iot-broker.service # vi /etc/systemd/system/iot-broker.service # 改下面 3 处占位路径 # systemctl daemon-reload && systemctl enable --now iot-broker # 查看:systemctl status iot-broker | journalctl -u iot-broker -f Description=YwxApp IoT MQTT Broker (Workerman) Documentation=https://www.ywxapp.cn After=network-online.target mariadb.service redis.service Wants=network-online.target [Service] # ▼▼▼ 按实际环境改这三行 ▼▼▼ WorkingDirectory=/www/wwwroot/ywxapp_dev ExecStart=/www/server/php/74/bin/php think iot start User=www Group=www # Workerman 主进程常驻前台(不加 -d),日志交给 journald 并按天落 runtime/log Type=simple StandardOutput=append:/www/wwwroot/ywxapp_dev/runtime/iot.log StandardError=append:/www/wwwroot/ywxapp_dev/runtime/iot.log # 若 runtime/iot.pid 里的进程还活着,说明已有一个实例在跑,直接启动失败而不是抢端口 ExecStartPre=/bin/sh -c 'p=/www/wwwroot/ywxapp_dev/runtime/iot.pid; if [ -f "$p" ] && kill -0 "$(cat "$p")" 2>/dev/null; then echo "iot broker already running (pid $(cat $p))" >&2; exit 1; fi; rm -f "$p"; exit 0' # Workerman 推荐组合:主进程收 SIGINT 优雅退出,超时后整组 SIGKILL KillSignal=SIGINT KillMode=mixed TimeoutStopSec=30 Restart=always RestartSec=5 LimitNOFILE=65535 [Install] WantedBy=multi-user.target