我已經編寫了一個守護程序,它管理一個或多個RS232設備(通常爲FT232R usb2serial)上的多種通信協議。 一旦的/ dev/ttyUSB *設備出現時,如果檢測到某些屬性, systemd被告知通過的udev啓動一個進程:systemctl服務啓動後執行udev的RUN語句
ENV{SYSTEMD_WANTS}="%s{manufacturer}.service"
一旦守護進程已經開始,它需要被告知要打開哪個設備,這是我通過udev的事:
RUN="/usr/bin/sercomc open %E{sd_name} %E{sd_proto} %N"
所以完整的udev規則讀起來像是:
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{manufacturer}=="sercomd", ENV{SYSTEMD_WANTS}="%s{manufacturer}.service", ENV{sd_proto}="%s{product}", ENV{sd_name}="%s{serial}", RUN="/usr/bin/sercomc open %E{sd_name} %E{sd_proto} %N"
現在的問題是運行時befor執行E中的守護進程啓動,使 這個命令顯然沒有任何效果:
systemd-udevd[1638]: starting '/usr/bin/sercomc open ctl-vk1 ctserial /dev/ttyUSB0'
systemd-udevd[1632]: '/usr/bin/sercomc open ctl-vk1 ctserial /dev/ttyUSB0'(err) 'Couldn't connect to server: Connect failed: Connection refused'
[...]
sercomctl[1639]: [2015-10-12 03:05:39:291634] Serial communication daemon ver. 0.5 starting up
是否有解決這一點,即運行命令一旦systemd啓動完成業務觸發一個推薦的方式?
如果您認爲您的問題很混亂,請編輯您的問題以解釋。 –