@Tyusha

Как зайти в консоль работающей службы?

Извините за ламерский вопрос. Конкретный пример: на Ubuntu создала сервер Minecraft. Если я его запускаю из командой строки, всё понятно, он работает, я нахожусь в консоли сервера, делаю там что хочу. Для выхода в $ останавливаю сервер, приложение закрывается.

А если я запустила Minecraft сервер как службу, то как мне заглянуть и поработать в его консоли, а потом вернуться в системную командную строку не завершая работу сервера?
  • Вопрос задан
  • 420 просмотров
Пригласить эксперта
Ответы на вопрос 4
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Обычно, если служба нуждается в управлении, то у нее есть отдельная программа управления, которая позволяет из командной строки отправить некую команду на совершение некоего действия. Служба стартует при запуске сервера и не предполагает интерактива.
Ответ написан
Комментировать
Открой ещё один терминал и всё
Ответ написан
Комментировать
@SunTechnik
Обычно службы не подразумевают работу с терминалом.

В конкретном случае можно попробовать два способа:

1. Запускать процесс minecraft в службе через screen, tmux.
Тогда можно будет подключиться к этой сессии, а потом отключиться не завершат работу.

2. При запуске перенаправить stdin из именованного pipe, а вывод - в файл.
Тогда можно будет через echo в pipe кидать команды, а в файле смотреть результаты.
Ответ написан
@ya_ne_znau
Короткий ответ: никак. У служб (daemon) нет открытых дескрипторов stdin, stdout, stderr так как они отсоединяются от терминала после запуска. При этом они могут писать логи в файлы и читать что-то из других файлов. При надобности к службам идут программы-клиенты, посылающие сообщения службам.

Длинный ответ для конкретной ситуации: если нужно писать в консоль сервера Minecraft, то его либо не нужно отсоединять (ставить в фон), либо после отсоединения нужно обратно подсоединить.
Ctrl-Z (SIGSTP) - поставить в фон и остановить.
$ jobs
— выводит список задач в фоне
$ bg %[номер]
$ bg [идентификатор процесса]

— продолжить задачу в фоне
* при этом если терминал закрыть — он вполне может послать SIGHUP (Hang up), что остановит процесс. Отключение сигнала - отдельная тема, но где-то читал. Пока и так сойдёт.
$ fg [идентификатор процесса]
— вернёт задачу из фона

В случае с
$ ./run_my_minecraft_server
...
Ctrl-Z
$ bg %1 # первый процесс в списке
$ # терминал свободен
$ fg
# здесь (в теории) снова должна быть консоль сервера
...

— не знаю насчёт закрытия stdin/stdout, но в простом случае должно сработать.

А вообще — для сервера и других дел используйте разные терминалы (даже без окружения их больше одного): Ctrl+Alt+F# (открыть tty#), а службы не предназначены для стандартного ввода.

background process to foreground: https://thelinuxcode.com/bring-a-background-linux-...
send process to background: https://serverfault.com/questions/41959/how-to-sen...
daemon to foreground: https://serverfault.com/questions/41009/how-do-i-b...
Примеры использования bg и jobs: https://linuxopsys.com/topics/bg-command-in-linux
tty1-6 (не совсем сюда относится, просто сам недавно узнал): https://losst.pro/pereklyuchenie-mezhdu-konsolyami...
Что-то на умном:
Запуск с защитой от SIGHUP: nohup
Разделенич терминала между процессами: screen
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы