システムサービスで未使用の疑似端末ペアを見つけましたか?

システムサービスで未使用の疑似端末ペアを見つけましたか?

私がサービスファイルを作成しているアプリケーションはにSTDIN接続されると予想していますtty。つまり、端末で実行されると予想されます。Systemd次の設定を使用すると、私のアプリケーションの問題は解決されますが、ここでは他のアプリケーションですでに使用されているか、ttyシステムにまったく存在しない可能性がある静的に設定されたパスを使用しています。

StandardInput=tty-force
TTYPath=/dev/tty30

systemd(または私が)使用していないペアリングを特定してpseudoterminal代わりに使用できる場合は、より良いでしょう。

答え1

によるとman systemd.exec。お探しの機能がに組み込まれていませんsystemd

systemdあるいは、無料のTTYを見つけて、ハードコーディングされたTTYでユニットファイルを作成し、systemctl startインスタントユニットファイルを呼び出す別の小規模サービスを作成することもできます。

答え2

私はsystemdにまったく依存せずに一般的なscriptコマンドを使用する解決策を見つけました。たとえば、

ExecStart=/usr/bin/script -e -c "/usr/bin/python3 -m http.server" /dev/null

python3割り当てられた擬似端末を使用して実行されますscript。コピーしたファイルは で削除されます/dev/null

以前のバージョンはscript信号を正しく処理できないようであるため、KillSignal=SIGKILL同様のパッチワークが必要になる場合があります。 (2.37.2はこれがscriptなくても動作しますutil-linux。)

からman script

-c, --command command
           Run the command rather than an interactive shell. This makes it
           easy for a script to capture the output of a program that behaves
           differently when its stdout is not a tty.

関連情報