これがこの質問を投稿するのに適した場所ではない場合は、そう言ってください。
私はUSBドングルデバイス(アンテナ付きのCC2531、アンテナモデルを忘れた)とLinuxシステム(KDEネオンユーザーバージョン5.19、Ubuntu 18.04ベース)でzigbee2mqtt(Zigbeeエージェント)を実行しています。時にはzigbee2mqttが動作を停止し、正常に再実行するには、デバイスの所有権を変更する必要があります(chownを使用)。だから私はそれをスクリプトに入れました。
~/my_services/zigbee2mqtt_service $ cat z2m.sh
sudo chown gal /dev/ttyACM0
cd /opt/zigbee2mqtt
npm start
そして、スクリプトを実行するためにsystemdでサービスを作成します。
~/my_services/zigbee2mqtt_service $ systemctl cat zigbee2mqtt.service
# /etc/systemd/system/zigbee2mqtt.service
[Unit]
Description=zigbee2mqtt
After=network.target
[Service]
# ExecStart=/usr/local/bin/npm start
# WorkingDirectory=/opt/zigbee2mqtt
ExecStart=/home/gal/my_services/zigbee2mqtt_service/z2m.sh
StandardOutput=inherit
StandardError=inherit
Restart=always
User=gal
[Install]
WantedBy=multi-user.target
以前は動作していましたが、何らかの理由で現在はサービスが開始されていません。有効にしてデーモンを手動で起動して再ロードしてみました。 z2m.shスクリプトを手動で実行すると正常に実行されますが、リモートシステムで作業しているため、切断する必要があるため、zigbee2mqttが停止します。
何を直すべきか、または「失効した所有権」を回復する他の方法を指摘することができれば良いでしょう。
編集:サービスの状態を確認したときに得られるものは次のとおりです。
~ $ systemctl status zigbee2mqtt.service
● zigbee2mqtt.service - zigbee2mqtt
Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; enabled; vendor pres
Active: failed (Result: exit-code) since Mon 2020-07-20 11:00:57 IDT; 2 days
Process: 4059 ExecStart=/home/gal/my_services/zigbee2mqtt_service/z2m.sh (code
Main PID: 4059 (code=exited, status=203/EXEC)
Jul 20 11:00:57 phoenix systemd[1]: zigbee2mqtt.service: Service hold-off time o
Jul 20 11:00:57 phoenix systemd[1]: zigbee2mqtt.service: Scheduled restart job,
Jul 20 11:00:57 phoenix systemd[1]: Stopped zigbee2mqtt.
Jul 20 11:00:57 phoenix systemd[1]: zigbee2mqtt.service: Start request repeated
Jul 20 11:00:57 phoenix systemd[1]: zigbee2mqtt.service: Failed with result 'exi
Jul 20 11:00:57 phoenix systemd[1]: Failed to start zigbee2mqtt.
lines 1-12/12 (END)
答え1
DrTronに感謝します。この投稿、私はこの問題を解決する正しい方法を見つけました。つまり、USBデバイスにアクセスできるグループにユーザーを追加することです。
他のユーザーが興味がある場合は、私のユーザー「gal」をダイヤルアウトグループに追加しました。
sudo adduser gal dialout
その後、systemdサービスはzigbee2mqttにのみ興味を持っているだけで、サービスを次のように変更しました。
$ systemctl cat zigbee2mqtt.service
# /etc/systemd/system/zigbee2mqtt.service
[Unit]
Description=zigbee2mqtt
After=network.target
[Service]
ExecStart=/usr/local/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=gal
[Install]
WantedBy=multi-user.target
最後にログアウトしてからログインし、新しい設定でサービスを開始します。
$ systemctl daemon-reload
$ systemctl start zigbee2mqtt.service