LINUX.ORG.RU
ФорумAdmin

Закрытие screen при завершении процесса


0

1

Всем привет :) Запускаю в screen приложение Получаю PID процесса приложения делаю kill PROC_PID

вижу, что скрин висит до сих пор захожу screen -x вижу вконце строку TERMINATED

Иными словами, процесс завершился, а скрин по-прежнему висит. Скажу сразу, что это приложение - сервер контры :)

Необходимо, чтобы скрин закрывался вместе с процессом

p.s. конечно можно вычислить и PID скрина, но имха это не самое изящное решение проблемы


Ответ на: комментарий от sin_a

Так и делаю: screen -d -m -S CW2 ./hlds_run -game cstrike +ip 192.168.10.10 -nomaster +log on +map de_dust2 +port 27016 -maxplayers 15 +exec server.cfg -insecure &

HunteX
() автор топика
Ответ на: комментарий от outsider

Уточните, как именно, я не совсем понял

HunteX
() автор топика

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

VladimirMalyk ★★★★★
()
Ответ на: комментарий от VladimirMalyk

У меня нет доступа к серверу через клиент, доступ есть только по SSH. Иногда необъходимо выполнять команды на сервере, поэтому юзаю скрин.

А теперь можно ближе к проблеме ?)

HunteX
() автор топика
Ответ на: комментарий от HunteX

какой еще клиент? ссш это и есть доступ для выполнения команд на серве.

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

VladimirMalyk ★★★★★
()
Ответ на: комментарий от VladimirMalyk

ААААААААААААААААААААААА ЛОЛООЛОЛОЛОЛОЛОЛОЛ!!!111

Я_ЗНАЮ_ЧТО_ТАКОЕ_МАТЬ_ЕГО_СКРИН, КЭП!

Объясню подробнее: Мне нужно выполнять команды на сервере контры Доступа через клиент контры (т.е. на порт 27016) у меня НЕТ А есть доступ только по SSH к физическому серверу Именно поэтому я держу сервера контры в скрине, чтобы выполнять на них ксные команды.

Сейчас я написал скрипт, который будет управлять кс-серверами. Все работает, но проблема в том, что при убивании процесса кс-сервера его скрин остается. В случае, к примеру screen ping 127.0.0.1 и последующего убийства процесса ping, скрин падает сам, а вот в случае контры - нет.

HunteX
() автор топика
Ответ на: комментарий от VladimirMalyk

Я так и делаю, но при убивании скриптом большого числа процессов кс-серваков, получаю ОЧЕНЬ МНОГО БУКАФ в выводе screen -x

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

HunteX
() автор топика
Ответ на: комментарий от backbone

спасибо, ща покопаю, чего там интересного

HunteX
() автор топика
Ответ на: комментарий от r2d2

Эмм, а как я смогу выполнять команды на кс-сервере? Если я запущу кс-сервер НЕ в скрине, то доступа к кс-серваку я уже не получу, так как выполнение команд на кс-сервере возможно только если он работает не в бэкграунде (фоновом режиме), а работу НЕ в фоновом режиме можно реализовать только в скрине

HunteX
() автор топика
Ответ на: комментарий от VladimirMalyk

Хорошая идея. Но лучше я буду вычислять PID соответствующего скрина и тоже его убивать вместе с процессом

Хотя, было бы неплохо отправлять в скрин сочетания CTRL+C ... можно ли такое реализовать, помоему в мане по скрину что-то подобное видел ... ща почитаю

HunteX
() автор топика

Возможно, что сервер контры форкает потомков и они держат открытыми терминал. Посмотрте после kill'a с помощью команды «lsof /dev/pts/Номер_терминала» есть ли такие процессы.

mky ★★★★★
()
Ответ на: комментарий от mky

У меня тоже есть такие подозрения, что не просто так скрин висит, спасибо за команду :)

HunteX
() автор топика
Ответ на: комментарий от HunteX

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

короч в сухом остатке - держать много скринов это моветон. правильный путь - много консолек и манаджить на уровне них.

хотя уверен что есть способ из фона доставать по PID и цеплять на текущую консоль - хоть в скрине хоть без скрина. но я всегда был ленив и скрином обходился

VladimirMalyk ★★★★★
()
Ответ на: комментарий от power

Я не хочу решать эту задачу программированием, мне нужен был простенький скрипт, который будет ребутать/стартовать серваки контры :) Этот скрипт уже работает, только имеет вот такой небольшой недостаток. А написание _ТАКОГО_ скрипта я не считаю программированием.

Так как я не играю в контру, у меня нет клиента. Правильным решением было бы забыть про скрин, качнуть какой-нибудь «кс-ремот-клиент» для выполнения удаленных команд ака RCON и не париться ^_^

HunteX
() автор топика
Ответ на: комментарий от DALDON

Как я понял, при запуске через nohup программа продолжает работу и соответственно вывод в консоль, даже при выходе?

А если у меня несколько серверов?

HunteX
() автор топика
Ответ на: комментарий от HunteX

Там в тот каталог откуда был запуск оно вроде создаёт файл: nohup.out, и туда бросает вывод отвязанной команды.

DALDON ★★★★★
()
Ответ на: комментарий от HunteX

Ааа, сервер запущеный предпологает интерактивное взаимодействие? Тогда да, screen :)

DALDON ★★★★★
()

ВОТ ОНО! ВОТ ОНО - РЕШЕНИЕ МОЕЙ МЕЧТЫ! ВООООООТ ОНО!!!

fuser -ka /var/game/cw1/

На самом деле все было очень просто :) Спасибо всем, кто помогал!

HunteX
() автор топика
Ответ на: комментарий от HunteX

Правда, теперь показывает вот что:

screen -x 27950 There is a screen on: 27950.CW1 (02/12/12 00:23:02) (Dead ???)

Может отрубится сам по таймауту ...

HunteX
() автор топика
Ответ на: комментарий от HunteX

Но это не проблема, так как:

Remove dead screens with 'screen -wipe'.

HunteX
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.