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

Ссылка скопирована
1 ответ

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

А если я запустила Minecraft сервер как службу, то как мне заглянуть и поработать в его консоли, а потом вернуться в системную командную строку не завершая работу сервера?

Дополнительно:

Смотрите доку mincraft, имеет ли он консоль в режиме службы и если да, то как получить к ней доступ.
В подобных случаях нет стандартного решения, т.к. у службы отсутствуют стандартные потоки.
Обычно службы могут слушать какой-либо локальный порт, к которому можно подключиться, например, telnetом. Либо предоставляют своего клиента для управления, который связывается со службой каким-то ему ведомым способом.

Ответы:

Обычно, если служба нуждается в управлении, то у нее есть отдельная программа управления, которая позволяет из командной строки отправить некую команду на совершение некоего действия. Служба стартует при запуске сервера и не предполагает интерактива.

Открой ещё один терминал и всё

Обычно службы не подразумевают работу с терминалом.

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

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

2. При запуске перенаправить stdin из именованного pipe, а вывод - в файл.
Тогда можно будет через echo в pipe кидать команды, а в файле смотреть результаты.

  • Обычно службы не подразумевают работу с терминалом.

    SQL базы данных с вами не согласятся. Всякие вот такие игровые сервисы - тоже.
    Другое дело, что как правило для них делают WEB-морды, консоль - для нердов!

  • AUser0, с базой данных работа из консоли происходит через самостоятельный клиент, а не через std сервера баз данных

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

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

$ bg %[номер] $ bg [идентификатор процесса]

$ bg %[номер] $ bg [идентификатор процесса]

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

В случае с

$ ./run_my_minecraft_server ... Ctrl-Z $ bg %1 # первый процесс в списке $ # терминал свободен $ 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

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Для того чтобы зайти в консоль работающей службы, вам необходимо выполнить следующие шаги:

1. Откройте командную строку на вашем компьютере. Для этого можно использовать поиск по системе или нажать Win + R и ввести "cmd".

2. В командной строке введите команду "services.msc" и нажмите Enter. Это откроет окно "Службы" (Services).

3. В окне "Службы" вы увидите список всех служб, которые работают на вашем компьютере. Найдите нужную вам службу, с которой вы хотите работать.

4. Чтобы открыть консоль для выбранной службы, щелкните правой кнопкой мыши на ней и выберите "Свойства" (Properties).

5. В открывшемся окне перейдите на вкладку "Общее" (General) и найдите раздел "Тип запуска" (Startup type). Здесь вы можете выбрать, как служба будет запускаться: автоматически, вручную или отключено.

6. Если вы хотите запустить службу вручную, то в разделе "Состояние службы" (Service status) нажмите на кнопку "Запустить" (Start). Если служба уже запущена, то кнопка будет неактивной.

7. После того как вы запустили службу, вы можете следить за ее работой в консоли или управлять ей через командную строку.

Это основные шаги, которые помогут вам зайти в консоль работающей службы и управлять ею. Надеюсь, это решит вашу проблему!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно