Как узнать ID процесса с pid файла (kill -KILL ID)

Модератор: Модераторы разделов

lexikon
Сообщения: 128

Как узнать ID процесса с pid файла

Сообщение lexikon »

предположим есть такая функция остановки процесса
stop() {
if [ -f $srv_path/cs.run ]; then
killall hlds_run
killall hlds_i686
cd $srv_path
rm -R ./cs.run
echo "Stpoing HLTV server [ ok ]
"
else
echo -n "Stoping HLTV [ FAILD ]
"
fi
}

при этом создаеться pid файл! чем неудобно вышенаписанное - убивает все процессы(( а мне надо поределенные!
как узнать точнее прочитать этот ID процесса с pid файла и остановить процесс
что изменить в этой функции?

пардон! пид файл не создаеться((( походу никак не обойти ситуацию(((

тогда подскажите - есть такой скрипт

Код: Выделить всё

#! /bin/sh
#####################################################
##### start/stop/restart script v2 by sentenced #####
#####################################################
#srv1_name; Server name, example cs_pub, do not use long names with spaces!
#srv1_fname; full server name like CS 1.6 PUB Server
#srv1_script; if server is hl1 then type hlds_run if server is hl2 or CS:S type srcds_run
#srv1_ip; IP address of server
#srv1_port; Server port
#srv1_gametype; Gametype, example cstrike, dods, or dod, etc.
#srv1_players; maximum players on server
#srv1_map; starting map
#srv1_svlan; sv_lan 0/1, if your server is nosteam you need to turn it on, type 1
#srv1_pid; server uses this file to write there process id
#srv1_heapsize; this opt sets how much [max] RAM in kb server will use
#srv1_opts; type there other server opts, like -nomaster -insecure
####################################################

srv1_name=CS2.VZLETKA.NET
srv1_fname="CS2.VZLETKA.NET"
srv1_dirpath="/var/servers/cs3fun/nosteam"
srv1_script=hlds_run
srv1_ip=89.105.128.155
srv1_port=27015
srv1_gametype=cstrike
srv1_players=22
srv1_map=de_dust2
srv1_svlan=1
srv1_pid=cspub.pid
srv1_heapsize=256000
srv1_opts="-nomaster -insecure -pingboost 2"

#####################################################
# don't tuch anything below this line!
#####################################################

#srv1_chk=`screen -ls | grep $srv1_name`
#srv1_chk=CS2.VZLETKA.NET
function srv1_started() {
if [ -z $srv1_chk ]; then
return 1
else
return 0
fi
}

function srv1_stop() {
srv1_started
if [ $? -eq 1 ]; then
return 1
fi
/usr/bin/screen -S $srv1_name -X quit >/dev/null 2>&1
return 0
}

function srv1_start() {
srv1_started
if [ $? -eq 0 ]; then
return 1
fi
cd $srv1_dirpath $srv1_name ./$srv1_script -game $srv1_gametype +maxplayers $srv1_players +map $srv1_map +port $srv1_port -heapsize $srv1_heapsize +sv_lan $srv1_svlan $srv1_opts -pidfile $srv1_pid
return 0
}

function srv1_echo() {
echo -n $2
$1
if [ $? -eq 0 ]; then
echo -e "\t\t[ OK ]"
else
echo -e "\t\t[FAIL]"
fi
return 0
}

case $1 in
start)
srv1_echo srv1_start "STARTING $srv1_fname: `basename $0` start"
;;
stop)
srv1_echo srv1_stop "STOPING $srv1_fname: `basename $0` stop"
;;
restart)
srv1_echo srv1_stop "STOPING $srv1_fname: `basename $0` stop"
srv1_echo srv1_start "STARTING $srv1_fname: `basename $0` start"
;;
*)
echo "Use Commands: `basename $0` start|stop|restart"
;;
esac

он хорош собой но есть проблема! когда его добавляешь в автозагрузку! появляеться консоль сервера и линукс дальше не грузится(( пока не введешь quit - этот quit собственно относиться к серверу запускаемому
просто в этом скрипте последнем оставнока идет вписывая в консоль сервера quit

Код: Выделить всё

function srv1_stop() {
srv1_started
if [ $? -eq 1 ]; then
return 1
fi
/usr/bin/screen -S $srv1_name -X quit >/dev/null 2>&1
return 0
}

меня и это устраивает если бы консоль эта открывалась от другого юзера чтоб я ее короче не видел
Спасибо сказали:
Аватара пользователя
AlexFilth
Сообщения: 450
Статус: Хронический ламер
ОС: GENTOO

Re: Как узнать ID процесса с pid файла

Сообщение AlexFilth »

а что мешает сделать по cron'у запуск скрипта сразу после загрузки ? PID можно узнать из ps ax | grep Имя_процесса.
-=emerge -auDn world=-
Спасибо сказали:
lexikon
Сообщения: 128

Re: Как узнать ID процесса с pid файла

Сообщение lexikon »

а я что то про крон не подумал :rolleyes:
а возможно ли чтоб скрипт сампредположим опредлял pid процесса и его килл? хотяб набросочек! а то я демоны не писал ^^
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Как узнать ID процесса с pid файла

Сообщение Frank »

Верояно, вы пускаете скрипты с правами пользователя, в то время, как полагается его пускать с правами рута либо специального пользователя. Поэтому у вас не создаётся pid-файл, и при стопе сервис не останавливается.
Изображение
Спасибо сказали:
Аватара пользователя
Siras
Сообщения: 54
ОС: Gentoo

Re: Как узнать ID процесса с pid файла

Сообщение Siras »

Как я понимаю речь идёт о скрипте для Counter-Strike сервера. Давным давно набросал для себя такой скрипт:

Код: Выделить всё

#!/bin/bash
case "$1" in
start)
cd /home/cs/hlds_test
screen -A -m -d -S cst \
./hlds_run -game cstrike  \
+port 27019 +map cs_militia \
+maxplayers 22 -insecure +ip myip -pingboost 2 -nomaster
echo "Srart CS Server"
;;
stop)
screen -S cst -X quit
echo "Stop CS Server"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac


В нём конечно нет не каких проверок (например на то запущен ли в данный момент сервер или нет) но мне они и не нужны.
Спасибо сказали: