PuTTYを使用して/ dev / tty2で実行されているサービスと対話するにはどうすればよいですか?


2

さて、systemdUbuntu 16.04クラウドサーバー上で使用するサービスとして実行しているプログラム(作成しておらず変更できないプログラム)があります。それは、偉大な働いている以外、私は実行中のプログラムと対話できるようにする必要があること、およびプログラムは、それとの対話サポートする唯一の方法は、経由でstdin/ stdout。サービスがコマンドライン入力のみを使用することは非常に慣習的ではないことを理解していますが、他にどのような選択肢があるかわかりません。

私が何を読んでから、ここで、それがためにTTYを使用するサービスを伝えることが可能ですstdinstdout、と私は考えて、私はちょうどそれを行うには、セットアップ私のサービスをしました:

[Unit]
Description=My Service
After=getty@tty2.service

[Service]
Type=simple
ExecStart=/path/to/my/service
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
Restart=always
RestartSec=5
User=username

[Install]
WantedBy=multi-user.target

サービスが実行されたら(そして、はい、間違いなく実行されています)、screenPuTTY のコマンドを使用して/dev/tty2この回答で説明されているように表示してみます

sudo screen /dev/tty2

ただし、PuTTYに表示されるのは、やり取りできない出力のない空白の画面だけです。(そして、はい、プログラムは実行中に大量の出力を生成します。)

だから、サービスの構成、screenコマンドの使用、PuTTY自体のどこに問題があるのか​​はわかりません。私は一般的にLinuxの経験豊富なユーザーではないので、TTYで何かをするのはこれが初めてなので、私の理解はかなり薄いです。

回答:


1

これは(まだ)完全にテストされていませんが、動作する可能性があります。

ログインした後(PuTTYなどtmuxを使用したSSH経由で)、新しいセッションを開始しtmuxます(私はを使用しますが、選択できますscreen)。プレーンなコマンドtmuxは機能しますが、セッションに名前を付けましょう。

tmux new-session -s foo

次に、次のPIDを見つけますservice

pidof service

それを使用reptyrして、内部にある現在の端末に接続しますtmuxsudo同様に必要かもしれません)。短い特徴とそれを機能させるために何をすべきかについては私の私の答えを参照してくださいreptyr

reptyr <pid>

ログアウトしたい場合は、最初から切り離すtmuxCtrl+ BD(のためにscreenそれはですCtrl+ AD)。後でその端末に戻ることができます

tmux attach-session -t foo

そのためreptyr、次の再起動後まで再度使用する必要はありません。


私があなたならtmux、そもそも内部でサービスを実行しようとすると、TTY tmux関連のsystemd設定なしで提供されるTTYにサービスを簡単にバインドできると思います。これを参照してください:実行するためにどのようにtmux/ screensystemd> 230?

何かのようなもの:

…
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/tmux new-session -d -s foo /path/to/my/service
User=username
…

これが機能する場合tmux attach-session …、適切なユーザーとして実行する必要があります。

sudo -u username tmux attach-session -t foo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.