我有一个运行基于 Debian 的 Linux 发行版的微控制器。
我有一个 Nextion 屏幕,通过 /dev/ttyMOD1 端口上的 UART 连接到它。我有一个脚本,它使用 stty,并使用 cat 从屏幕获取数据并将其输出到 mqtt 主题。当我从 shell 运行脚本,或者在系统启动后重启服务时,我能够通过 ssh 连接,它运行正常。但是,当系统启动时,服务内部的 cat 任务由于某种原因无法运行,只有在服务重启后才能运行。
脚本和服务文件对用户具有 +x 权限。我需要帮助来解决 cat 在启动时无法运行的问题。
脚本和服务的文本:
serial.service
[Unit]
Description=Serial script on startup
Requires=wb-mqtt-serial.service
After=wb-mqtt-serial.service
[Service]
User=root
WorkingDirectory=/mnt/data/root
ExecStart=/mnt/data/root/serial.sh
Restart=on-failure
Type=simple
[Install]
WantedBy=multi-user.target
serial.sh
#!/bin/bash
mqtt-delete-retained "/devices/screen/#"
stty -F /dev/ttyMOD1 ospeed 9600 ispeed 9600 raw clocal -parenb -echo cs8
CR="$(echo -e '\r')"
exec 4<> /dev/ttyMOD1
/bin/cat <&4 | while :
do
IFS="$CR" read -r line
case "$line" in quit*)
break
;;
*)
if [[ -n "$line" ]]; then
mosquitto_pub -t /devices/screen/controls/raw/meta/type -r -m text
mosquitto_pub -t /devices/screen/controls/raw -r -m "$line"
fi
;;
esac
done