我正在制作一个类似信息亭的系统,它从条形码读取器读取数据,然后 java 程序从控制台读取数据并解释它。我打开自动登录,并使用 crontab 来运行它
* * * * * /home/name/script.sh < /dev/tty1 > /dev/tty1
而脚本本身还包括
exec sudo /usr/bin/java -jar '/home/name/reader/dist/reader.jar' </dev/tty1
(脚本还有其他部分,但它们只是检查其他正在运行的程序......)
我期望的是,登录后,crontab 会像我只是从控制台运行它一样运行它。然而,结果却很奇怪。
有时会正确运行一段时间。然而,在几次读取之后,bash 进来,并开始解释 tty1 输入,而不是将其重定向到 java。
有时它显示它正在运行,但从不发送任何信息到 java.lang.
有时,在收到kill命令后,crontab会重新启动它,而不将输入重定向到java。
同时,它与其他计算机进行通信,其他计算机也发送命令。诸如尝试更新、响应、检查一切是否仍在运行之类的事情,以及它们被重定向到 tty1 输出,但这些总是正确显示,即使 bash 正在从标准输入读取时也是如此。
虽然我实际上没有使用 bash(我通过 SSH 控制它),但它通过 ttyS0 和 ttyAMA0 与其他计算机通信,因此它们不应该被锁定。
我还尝试将 java 作为服务运行,但在这种情况下,它不断地从输入中读取“null”,从而无法从中提取任何有用的数据。
现在我认为应该是0< /dev/tty1
这样,但是其他教程和问题对于输入重定向非常模糊。关于重定向文件的输出和输入有很多内容,但没有关于 tty 的输入...
找到解决办法了,耶!在不同的 tty 上启动进程