LINUX.ORG.RU

Как убить screen посредством shell-скрипта?


0

0

Имеется процесс, поднятый с параметрами в screen, конкретно - сервак игровой (файл со строкой "screen -A -m -d -S hlds15 ./hlds_run -game cstrike +ip x.x.x.x"). Пытаюсь накорябать shell-скриптик для "start|stop|restart" этого сервера. Пока что не могу даже stop сделать.. Советовать нечто типа "killall hlds" не надо, потому в разное время может быть запущено два сервера - hlds15 и hlds16, оба в разных screen на разных портах. Потому и вижу выход только в том, чтобы убивать сам screen, ну типа как по "ctrl+C" делаю, но не могу сообразить, как... Делаю в скрипте ps -aux|grep hlds15, получаю процесс и pid его, но как дальше в скрипте описать, что убить етот pid - не знаю. :(

> но как дальше в скрипте описать, что убить етот pid - не знаю. :(

kill -9 pid

anonymous
()

>но как дальше в скрипте описать, что убить етот pid - не знаю. :(
kill PID
kill -9 PID

P.S> вместо screen используй nohup
     nohup ./hlds_run -game cstrike +ip x.x.x.x & 

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

Или я плохо объясняю, или меня непонятно.. :( Дак просто kill PID не катит вроде, т.к. он (PID) меняется ведь с каждым старт-стопом. Я же не пропишу в скрипте постоянную цифру. Надо чтобы скрипт как-то вылавливал реальный PID процесса и убивал.

Можно ли в shell присвоить команду линуха переменной? Т.е. так примерно, я пробовал - ps -aux|grep hlds15 $proc="ps -aux|grep hlds15" kill $proc

Не канает. При запуске "./hlds_shellrun stop" получаю ./hlds_shellrun: line 14: =: command not found, это строка

$proc="ps -aux|grep hlds15"

И что мне даст nohup (DESCRIPTION. Run COMMAND, ignoring hangup signals.)..? Не совсем понял...

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

>$proc="ps -aux|grep hlds15"
Смешно. Сам придумал?

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

Конечно сам! :) До сих пор с shell вообще потому как не сталкивался. Вообще, после вашего совета он мне стал пытаться убить какие-то несуществующие процессы... -

./hlds_shellrun: line 14: kill: (11633) - No such process ./hlds_shellrun: line 14: kill: (11629) - No such process

и т.д., но сам hlds остаётся ессно жив..

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

Да не надо мне блин killall hlds, так я и сам сделать могу... ДВА сервера запускаются hlds, один на 27015, второй на 27016. Соотв. все процессы hlds будут в куче, кучей и подохнут от "killall hlds". А остановить скриптом надо только один, 27015 например. Поэтому я к screen и привязываюсь, что надо скрин убить (или я неправ?), потому как они разные, hlds15 и hlds16 например.

2 sdio. вот вывод - root 9179 1 0 12:46 ? 00:00:00 SCREEN -A -m -d -S hlds15 ./hlds_run -game cstrike +sv_lan 1 +ip xx.xx.xx.xx +port 27015 +exec /pathtocfg -insecure +map de_dust2 -nomaster +maxplayers 32 root 9180 9179 0 12:46 pts/2 00:00:00 /bin/sh ./hlds_run -game cstrike +sv_lan 1 +ip xx.xx.xx.xx +port 27015 +exec /pathtocfg -insecure +map de_dust2 -nomaster +maxplayers 32 root 9188 9180 9 12:46 pts/2 00:32:14 ./hlds_i686 -game cstrike +sv_lan 1 +ip xx.xx.xx.xx +port 27015 +exec /pathtocfg -insecure +map de_dust2 -nomaster +maxplayers 32 root 9190 9188 0 12:46 pts/2 00:00:00 ./hlds_i686 -game cstrike +sv_lan 1 +ip xx.xx.xx.xx +port 27015 +exec /pathtocfg -insecure +map de_dust2 -nomaster +maxplayers 32 root 17109 17060 0 18:25 pts/8 00:00:00 grep hlds

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

>ДВА сервера запускаются hlds, один на 27015, второй на 27016.

man fuser. что-то типа fuser -k -TERM 27015/tcp

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

В смысле, я к sdio, его способ сработал :).. Но второй тоже интересно попробовать, - fuser.

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

2 sdio - можно ещё вопрос...? Командой этой можно будет любой скрин убить. подставляя соответственно только его имя -

kill `ps -ef | awk '! /awk/ && /name1/ {print $2}'`

kill `ps -ef | awk '! /awk/ && /name2/ {print $2}'`

или нет? Просто во втором случае не сработало... В кейсе restart. Если просто start или stop, то работает, если объединить

kill `ps -ef | awk '! /awk/ && /name1/ {print $2}'` /path/to/file/run_me

То не работает, только убивает, но не стартует.

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

А вчём продлема??

набираешь screen -x 
и цепляешься к нужным скринам, в них останавливаешь/запускаешь, потом отцепляешься от скринов и оно само продолжает работать.

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