Як я можу використовувати PuTTY для взаємодії зі службою, що працює на / dev / tty2?


2

Гаразд, тому у мене є програма (яку я не писав і не можу змінювати), яку я запускаю як службу, використовуючи systemdна своєму хмарному сервері Ubuntu 16.04. Це чудово працює, за винятком того, що мені потрібно вміти взаємодіяти із запущеною програмою, і єдиний спосіб, яким програма підтримує взаємодію з нею, є через stdin/ stdout. Я усвідомлюю, що служба досить нетрадиційна використовувати лише введення командного рядка, але я не бачу іншого вибору.

З того, що я прочитав тут , можна сказати сервісу використовувати TTY для stdinі stdout, і тому я думаю, що я налаштував свою службу, щоб зробити саме це:

[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

Як тільки моя служба працює (і так, вона точно працює), я намагаюся використовувати screenкоманду в PuTTY, щоб переглянути, /dev/tty2як описано в цій відповіді :

sudo screen /dev/tty2

Однак, коли я це роблю, все, що я бачу в PuTTY, - це порожній екран, без виводу, з яким я не можу взаємодіяти. (І так, програма генерує багато результатів під час роботи.)

Тож я не впевнений, куди я помилився, чи це в конфігурації сервісу, моєму використанні screenкоманди чи в самій PuTTY. Я взагалі не надто досвідчений користувач Linux, і я вперше щось роблю з TTY, тому моє розуміння досить тонке.

Відповіді:


1

Це абсолютно не перевірено (поки що), можливо, може працювати.

Після входу в систему (через SSH з PuTTY або будь-яким іншим), почніть новий tmuxсеанс (я використовую tmux, але ви можете вибрати screen), як ніби ви хочете працювати в оболонці всередині нього. Проста команда tmuxбуде працювати, але давайте назвемо сеанс:

tmux new-session -s foo

Тоді знайдіть PID вашого service:

pidof service

і використовуйте, reptyrщоб приєднати його до вашого поточного терміналу, який знаходиться всередині tmux(я думаю, вам може знадобитися sudoтакож). Дивіться цю мою відповідь, щоб ознайомитися з короткими характеристиками reptyrта що робити, щоб вона працювала.

reptyr <pid>

Якщо ви хочете вийти, перший відділятися від tmuxс Ctrl+ B, D(для screenйого Ctrl+ A, D). Пізніше ви можете повернутися до цього терміналу за допомогою

tmux attach-session -t foo

тому не потрібно використовувати reptyrзнову до наступного перезавантаження.


Якби я був ти, я б спробував запустити службу всередині, tmuxв першу чергу, я думаю, що це прямо пов'язує її з TTY, наданим tmuxбез systemdпараметрів, пов'язаних з TTY . Дивіться це: Як запустити tmux/ screenз systemd> 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.