udev ルールは systemd サービスをトリガーします。

udev ルールは systemd サービスをトリガーします。

作業中のudevルール(/etc/udev/rules.d/10-local.rules)を修正しています。

SUBSYSTEM=="tty", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", ATTRS{serial}=="000621000000", SYMLINK+="ttymkw"

この内容(行末):

SUBSYSTEM=="tty", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", ATTRS{serial}=="000621000000", SYMLINK+="ttymkw", TAG+="systemd", SYSTEMD_WANTS="offnet-uart-log.service"

offnet-uart-log.service手動で実行できるユーザーサービスがありますが、~/.config/systemd/userまだここまで到達していません。

, TAG+="systemd", SYSTEMD_WANTS="offnet-uart-log.service"udevルールの最後に追加した後、シンボリックリンクは生成されません(reloadを使用しますsudo udevadm control --reload-rules && sudo udevadm trigger)。

これはルールが間違っていることを示していますが、その理由は不明です。 udevはrootが所有し、サービスはユーザーが所有しているという事実に関連していますか?私が間違って理解したのでしょうかWANTS

SYSTEM_USER_WANTS私はorSYSTEM_WANTSとor=の4つの組み合わせをすべて試しました+=。これを削除すると*_WANTSシンボリックリンクが表示されるため、エラーは*_WANTS

私のttyデバイスにロギングサービスをトリガーさせるにはどうすればよいですか?


編集:私の答えで述べたように動作するように修正SYSTEM_USER_WANTSされましたENV{SYSTEM_USER_WANTS}。なぜ必要ですか?

答え1

このブログ投稿私が望むことをし、そのおかげでそれを交換し、そのおかげSYSTEMD_USER_WANTSENV{SYSTEMD_USER_WANTS}うまくいきました。

ENV{}私はまだその構成がなぜ必要なのか、そしてなぜ文書でそれが見つからなかったのか理解していません。

答え2

本当に欲しいならトリガー追加するサービス

RUN{program}="/bin/systemctl --user start offnet-uart-log.service"

あなたのためウデブルール。これを行うには、通常、サービスが許可されているより短い時間内に通話が返される可能性があるoneshotタイプである必要があります(ここでの議論を参照)。execsystemdudevUdevイベントで長いプロセスを実行するには?udevディスカッションとサイレントインストールのための他のページもあります。

関連情報