web-dev-qa-db-ja.com

Ubuntu 16.04の起動時にMosquitto MQTTブローカーを起動する方法

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

編集:

これが私がこれまでに得たものです。再起動して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

編集2:

Sudo systemctl enable mosquitto.serviceを実行しました。エラー終了コードは次のとおりです。

Process: 1720 ExecStart=/etc/mosquitto/mosquitto.conf (code=exited, status=200/CHDIR)
9
pekasus

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

/etc/init.d/mosquittoの中を見ると、

/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.confはデフォルトですでに実行されています

したがって、設定を/etc/mosquitto/conf.dmosquitto.confで参照)とenjoyに入れるだけです。


通常のsystemdサービスでは、次のことができます。

  • systemctl status mosquittoは現在のステータスを表示します
  • Sudo systemctl (start|stop) mosquittoは、現在のセッションのステータスを変更します
  • Sudo systemctl (enable|disable) mosquitto(現在の状態に影響を与えずに)起動動作を変更します
8

Mosquittoを実行していることを確認してください。

ps -aux | grep mosquitto

そして、これはdefault.confにあります:

listener 1883
0
İsmail Yavuz

ユニットファイルのExecStart=およびWorkingDirectory=行は完全に間違っています。実行可能ファイル(!)を作業ディレクトリとして使用して、構成ファイルを開始しようとしていますか?

正しく理解できれば、適切なユニットファイルは次のようになります。

[Unit]
Description=Mosquitto MQTT Broker
After=network.target

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

[Install]
WantedBy=multi-user.target

また、ユニットの起動と有効化を混同しないでください。これについての私の同様の答えを読んでください:

0
intelfx