作業中の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
があり、手動でトリガーできますが、まだここまで到達していません。
Udevルールの最後に, TAG+="systemd", SYSTEMD_WANTS="offnet-uart-log.service"
が追加されているため、シンボリックリンクは作成されません(Sudo udevadm control --reload-rules && Sudo udevadm trigger
でリロードします)。
これはルールが間違っていることを教えてくれますが、理由はわかりません。サービスがユーザーによって所有されているのに対し、udevがrootによって所有されていることに関連している可能性がありますか? WANTS
を誤解しましたか?
SYSTEM_USER_WANTS
またはSYSTEM_WANTS
と、=
または+=
の4つの組み合わせすべてを試しました。 *_WANTS
を削除するとシンボリックリンクが表示されるため、エラーは*_WANTS
にあります。
Ttyデバイスでログサービスをトリガーするにはどうすればよいですか?
編集:以下の私自身の回答で述べたように、SYSTEM_USER_WANTS
をENV{SYSTEM_USER_WANTS}
に変更すると機能します。なぜそれが必要なのですか?
このブログ投稿 私がやりたいことをします。そのおかげで、SYSTEMD_USER_WANTS
をENV{SYSTEMD_USER_WANTS}
に置き換えて、機能させました。
ENV{}
コンストラクトが必要な理由と、ドキュメントで見つからなかった理由がまだわかりません。
本当にサービスをトリガーしたいだけなら、追加します
RUN{program}="/bin/systemctl --user start offnet-uart-log.service"
udevルールに。これには、サービスのタイプがoneshot
またはexec
である必要があります。これにより、systemd
の呼び出しは、udev
で許可されている通常の短い時間枠内に戻ります(を参照)。たとえば、ここでの議論 devイベントで長時間のプロセスを実行する方法は? およびudev
と自動マウントについて議論している他のページ。