如何在 Ubuntu 16.04 中启动时启动 Mosquitto MQTT 代理

pek*_*sus 12 systemd 16.04

我正在尝试在 Ubuntu 16.04 上运行 Mosquitto MQTT Broker。我有 14.04 的说明,但由于 16.04 不再使用启动,我不知道如何转换为 systemd。

以下是 14.04 的命令:

description "Mosquitto MQTT broker"
start on net-device-up
respawn
exec /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Run Code Online (Sandbox Code Playgroud)

编辑:

这就是我到目前为止所得到的。当我重新启动并运行时,systemctl status mosquitto.service我显示 mosquitto 已加载但未处于活动状态:

[Unit]
Description=Mosquitto MQTT Broker

[Service]
WorkingDirectory=/usr/sbin/mosquitto
ExecStart=/etc/mosquitto/mosquitto.conf
Restart=always

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

编辑2:

sudo systemctl enable mosquitto.service。现在错误退出代码是:

Process: 1720 ExecStart=/etc/mosquitto/mosquitto.conf (code=exited, status=200/CHDIR)
Run Code Online (Sandbox Code Playgroud)

Mih*_*dis 11

安装sudo apt install mosquitto16.04添加/etc/init.d/mosquitto脚本。systemd 使用该脚本来生成/run/systemd/generator.late/mosquitto.service,这就是它所说的:

# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/mosquitto
Description=LSB: mosquitto MQTT v3.1 message broker
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=shutdown.target
After=remote-fs.target
After=systemd-journald-dev-log.socket
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/init.d/mosquitto start
ExecStop=/etc/init.d/mosquitto stop
ExecReload=/etc/init.d/mosquitto reload
Run Code Online (Sandbox Code Playgroud)

向内看/etc/init.d/mosquitto告诉我们

/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf 默认情况下已经运行

因此,只需将您的配置放入/etc/mosquitto/conf.d(由 引用mosquitto.conf)并享受.


作为常规的 systemd 服务,您可以:

  • systemctl status mosquitto 查看其当前状态
  • sudo systemctl (start|stop) mosquitto 更改当前会话的状态
  • sudo systemctl (enable|disable) mosquitto 改变启动行为(不影响当前状态)