我有一个程序,仅在一台 Raspberry Pi 上运行,但可以从多台其他计算机上运行(通过 SSH)。
当我在 Pi 上运行程序时,它按预期运行。
为了能够从 crontab 或 SSH 运行,我创建了(好吧,剪在一起)一些 bash 脚本,但是,它没有按预期运行。
第一个是这样的:
exec sudo /usr/bin/java \
-Djava.library.path=/usr/lib/jni \
-cp /usr/share/java/RXTXcomm.jar \
-jar '/home/pi/forgokapu/dist/forgokapu.jar' < /dev/tty1
但是,它不允许从 Pi 中读取tty1
。 (我认为 & 意味着在后台运行)。
然而,即使没有&
,它也会将输出提供给运行它的计算机 ( pts/0
),但不会从任何地方获取输入。我尝试添加
exec sudo /usr/bin/java \
-Djava.library.path=/usr/lib/jni \
-cp /usr/share/java/RXTXcomm.jar \
-jar '/home/pi/forgokapu/dist/forgokapu.jar' < /dev/tty1 >/dev/tty1
强制输入和输出到tty1
,但现在输出不会出现在任何地方,并ps -A
显示它正在运行pts/0
,不是tty1
。
位于< /dev/tty1
脚本内部,但程序仍然在pts/0
(或 crontab)上运行,并且不从其 中获取输入tty1
。巴什确实如此。
520 tty1 00:00:00 login
690 tty1 00:00:01 bash
917 pts/0 00:00:00 bash
1221 pts/0 00:00:00 sudo
1227 pts/0 00:00:00 java
1241 pts/0 00:00:00 ps
</dev/tty1
不将 java 重定向到tty1
.
问题:
我怎样才能强制程序从 获取输入tty1
?
我不需要 bash,所以它应该在前台运行。输出的重定向并不重要,但我会从程序的起源开始进行调试。
我也尝试过0</dev/tty1
,但输入仍然来自pts/0
我也尝试过
setsid sh -c 'exec sudo /usr/bin/java \
-Djava.library.path=/usr/lib/jni \
-cp /usr/share/java/RXTXcomm.jar \
-jar "/home/pi/forgokapu/dist/forgokapu.jar" <> /dev/tty1 >&0 2>&1'
从在不同的 tty 上启动进程,但仍然不起作用。 :'(
script
也不好,我需要与它相反的东西。