私はバーコードリーダーからデータを読み取り、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を介して制御します)、bashはttyS0およびttyAMA0を介して他のシステムと通信するため、ロックしないでください。
また、Javaをサービスとして実行してみましたが、この場合、入力から「null」を読み続けて、有用なデータを抽出することはできません。
今やるべきだと思います0< /dev/tty1
が、他のチュートリアルや質問は入力リダイレクトについて非常にあいまいです。出力と入力をファイルにリダイレクトする方法はたくさんありますが、ttyへの入力ではありません...
解決策が見つかりました。はい!他のttyでプロセスを開始する