Перейти к содержанию

taskset и renice бунтуют


Рекомендуемые сообщения

Ребят помогите, имеется vps сервер OpenVZ, CentOS Linux 6.2 на нем стоит два игровых сервера (стояло, теперь только один,так как второй не запускается) тут мне как то в голову взбрело обновить движок сервера, этого сделать не получилось а вот накосячил конкретно в папке пользователя удалось, после чего решил удалить пользователя и его домашний каталог командой userdel -r meat, после какого-то времени решил поставить сервер снова, поставил, при попытки запуска сервера при помощи скрипта :

#!/bin/bash# authors: Puma http://c-s.net.ua# version: 1.2#. /lib/lsb/init-functions###################################################### Configuration#####################################################server_name="Meat"  #Название сервераscreen_name="meat"  #Название screen-сессииuse_user="meat"  #Имя юзера от которого запускается серверpath="/home/meat"  #Путь до ROOT-директории сервера (без /в конце)hlds_ip="127.0.0.1"  #IP сервера ,не ставить 0.0.0.0hlds_port="27016"  #Порт сервераhlds_players="21"  #Максимальное количество игроков на сервереhlds_map="de_dust2_2x2"  #Имя первоначальной карты при запускеhlds_options="-sys_ticrate 10000 -pingboost 1"  #Дополнительные параметры запускаusecore="0,1"priority="0"  #Приоритет для сервера (-20 - Высокий ;20 - Низкий)hlds_pid="${screen_name}.pid"  #Имя pid файла сервераclear_logs="0"  # очишать лог файлы при запуске сервера через скрипт?clear_cache="0"  # очишать кэши системы перед запуском сервера? # работает только под рутомchecker_cmd="/bin/qstat" #Команда пакета qStat отвечающего за проверку сервера###################################################### End of configuration#####################################################if [ ! -x $path/hlds_run ]; then	printf "${title}${txtred} Set permissions 777 for hlds_run\n"	chmod -R 777 $pathfiif [ $use_user == "meat" ]; then	start1=""else	start1="sudo -u ${use_user}"fitxtwht='\e[0;37m' # Whitetxtgrn='\e[0;32m' # Greentxtylw='\e[0;33m' # Yellowtxtred='\e[0;31m' # Redtitle="${txtwht}[${txtgrn}${hlds_ip}:${hlds_port}${txtwht}]"# check screen pid: ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'# check hlds pid: ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'start() {	if [ "`ps -ef | grep SCREEN | grep $screen_name | grep $hlds_ip | grep $hlds_port | grep -v grep | wc -l`" -gt 0 ]; then		if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep $hlds_ip | grep $hlds_port | grep -v grep | wc -l`" -gt 0 ]; then			printf "${title} Server ${server_name} already started\n"			exit 1		fi	fi	cd ${path}	if [ ${clear_logs} == 1 ]; then		${start1} rm -f ${path}/debug.log		${start1} rm -f ${path}/cstrike/qconsole.log		${start1} rm -fr ${path}/cstrike/logs/*.log		${start1} rm -fr ${path}/cstrike/addons/amxmodx/logs/*.log		printf "${title} Server logs cleared\n"	fi	if [ ${clear_cache} == 1 ] && [ ${use_user} == "meat" ]; then		echo 3 > /proc/sys/vm/drop_caches		printf "${title} Cache && buffers cleared\n"	fi	printf "${title} Starting ${server_name}\n"	/usr/bin/screen -AmdS ${screen_name} ${start1} ./hlds_run -game cstrike +ip ${hlds_ip} +port ${hlds_port} +map ${hlds_map} +maxplayers ${hlds_players} ${hlds_options} -pidfile ${hlds_pid}	sleep 3	${start1} taskset -pc ${usecore} `cat ${path}/${hlds_pid}` > /dev/null	${start1} renice -n ${priority} -p `cat ${path}/${hlds_pid}` > /dev/null	if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then		printf "${title} Server successfully started! \n"	else		printf "${title}${txtred} Server crashed on start \n"	fi}kill_process() {	if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | wc -l`" -gt 0 ]; then		printf "${title} Kill: `ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep`\n"		${start1} kill -9 "`ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`"		${start1} rm -f ${path}/${hlds_pid}	else		printf "${title}${txtylw} Cannot kill hlds process of ${server_name} server\n"	fi}stop() {	if [ "`ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}' | wc -l`" -eq 1 ]; then		/usr/bin/screen -dr `ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`.${screen_name} -p 0 -X eval "stuff "quit""		/usr/bin/screen -dr `ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`.${screen_name} -p 0 -X eval "stuff "$(printf \\r)""		sleep 1		${start1} rm -rf ${path}/${hlds_pid}				if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | wc -l`" -gt 0 ]; then			printf "${title}${txtred} Server not stopped!\n"		else			printf "${title} Server has been stopped\n"		fi	else		printf "${title}${txtylw} Cannot stop server ${server_name}, screen session not found!\n"	fi}status() {	printf "${title} Get status of server ${server_name}\n"	${start1} ${checker_cmd} -retry 3 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep ${hlds_ip}	exit 1}console() {	if [ "`ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | wc -l`" -gt 0 ] && [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`" = "`cat ${path}/${hlds_pid}`" ]; then		printf "${title} Connecting to ${server_name} server console\n"		printf "${title}${txtylw} For exit from console press Ctrl+A,D\n"		printf "${title}${txtylw} Don't press Ctrl+C\n"		sleep 1		/usr/bin/screen -wipe > /dev/null		/usr/bin/screen -dr `ps -ef | grep SCREEN | grep ${screen_name} | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`.${screen_name}	else		printf "${title}${txtred} Cannot connect to ${server_name} server console, server not started!\n"	fi}checker() {	time=`date +%X`	date=`date +%D`		if [ -f ${checker_cmd} ]; then		if [ ! -x ${checker_cmd} ]; then			printf "${title}${txtred} Check run privileges of ${checker_cmd}\n"			exit 1		fi	else		printf "${title}${txtred} Check qstat/quakestat binar\n"	fi		checknoresp=`${checker_cmd} -retry 5 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep response`	if [ -n "${checknoresp}" ]; then		printf "${title} ${server_name} server is: ${txtred}[NO RESPONSE]\n"		printf "[${time} - ${date}] *[NO RESPONSE]* ${checknoresp}\n" >> $path/checker.log		kill_process		sleep 1		start		sleep 1		printf "StartUP ${title}:" >> ${path}/checker.log		if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then			printf " *[OK]* \n" >> ${path}/checker.log		else			printf " *[FAILED]* \n" >> ${path}/checker.log		fi		exit 1	fi		checkdown=`${checker_cmd} -retry 5 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep DOWN`	if [ -n "${checkdown}" ]; then		printf "${title} ${server_name} server is: ${txtred}[DOWN]\n"		printf "[{$time} - ${date}] *[DOWN]* ${checkdown}\n" >> ${path}/checker.log		start		sleep 1		printf "StartUP ${title}:" >> ${path}/checker.log		if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then			printf " *[OK]* \n" >> ${path}/checker.log		else			printf " *[FAILED]* \n" >> ${path}/checker.log		fi		exit 1	fi		checkup=`${checker_cmd} -retry 5 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep cstrike`	if [ -n "${checkup}" ]; then		printf "${title} ${server_name} server is: ${txtgrn}[OK]\n"		printf "[${time} - ${date}] *[OK]* ${checkup}\n" >> ${path}/checker.log	fi	if [ "`ps -e -o pid,cpuid,nice,cmd | grep hlds_ | grep -v SCREEN | grep -v grep | grep -v sh | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | awk '{print $3}'`" != ${priority} ]; then		if [ "`ps -ef | grep hlds_ | grep -v hlds_run | grep ${hlds_ip} | grep ${hlds_port} | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then			printf "${title}${txtylw} ${server_name} server priority is changed because server is crashed\n"			${start1} taskset -pc ${usecore} "`cat ${path}/${hlds_pid}`" > /dev/null			${start1} renice -n ${priority} -p "`cat ${path}/${hlds_pid}`" > /dev/null		else			printf "${title}${txtylw} ${server_name} server priority cant be restore because not found pidfile!\n"		fi	else		printf "${title} ${server_name} server priority is good!\n"	fi}case "$1" in	start)		start	;;	stop)		stop	;;	restart)		stop		kill_process		sleep 2		start	;;	status)		status	;;	console)		console	;;	checker)		checker	;;	*)	printf "${title} How to use: ${txtgrn}$0 {start|stop|restart|status|console|checker}${txtwht}\n"	exit 1esac

на что получаю ответ :

Цитата:

[
~]$ ./h.sh start

[127.0.0.1:27016] Starting Meat

You are not the owner of /var/run/screen/S-meat.

cat: /home/meat/meat.pid: No such file or directory

Sorry, user meat is not allowed to execute '/bin/taskset -pc 0,1' as meat on 127.0.0.1.

cat: /home/meat/meat.pid: No such file or directory

Sorry, user meat is not allowed to execute '/usr/bin/renice -n 0 -p' as meat on 127.0.0.1.

cat: /home/meat/meat.pid: No such file or directory

сервер не запускается, честно не могу понять в чем дело, в etc/sudoers прописано следующие :

## Allow root to run any commands anywhere root	ALL=(ALL) 	ALLmeat ALL=NOPASSWD: /usr/bin/renicemeat ALL=NOPASSWD: /bin/tasksethlds ALL=NOPASSWD: /usr/bin/renicehlds ALL=NOPASSWD: /bin/taskset
до удаление пользователя meat и его каталога с файлами сервера, данный скрипт работал отлично и проблем не было, после создания по новой пользователя meat и соответственно установки сервера начался данный геморрой, до удаления пользователя meat его ID был 502, после удаления и нового создания стал ID 501, может в этом загвоздка ? прошу вашей помощи в решение проблемы, так как в Linux новичок, спасибо
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...