Проблемы с rc.d-скриптом

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
CaBa
проходил мимо

Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 16:50:13

Прилепил транспорт на openfire и подумалось, что хорошо бы было запускать через rc.conf. Написал скрипт. Вроде всё взлетает, но есть грабли - не получается остановить командой stop пишет: jabber_mrim not running? (check /var/run/mrim.pid).

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

#!/bin/sh
#
#
# PROVIDE: jabber_mrim
# REQUIRE: DAEMON
# KEYWORD: shutdown
#

./etc/rc.subr

name="jabber_mrim"
rcvar=`set_rcvar`

load_rc_config $name

: ${jabber_mrim_enable="NO"}
: ${jabber_mrim_dir="/usr/local/etc/openfire/mrim/src"}
: ${jabber_mrim_piddir="/var/run"}
: ${jabber_mrim_confdir="/usr/local/etc/openfire/mrim"}

pidfile="${jabber_mrim_piddir}/mrim.pid"
conffile="${jabber_mrim_confdir}/mrim.conf"
command="${jabber_mrim_dir}/mrim.py"
command_args="-d -c ${conffile} -p ${pidfile}"

run_rc_command "$1"
Может подскажете куда рыть?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 16:59:28

ну а кто пидфайл будет создавать по вашему?

CaBa
проходил мимо

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 22:07:01

Да в том то и дело, что pid-файл создаётся и в файле правильный PID процесса. Но вот проблема - не останавливает и всё.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 22:14:15

я вообще там невижу не команду запуска ни команду остановки

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 22:28:15

Сорри конечно за такие вещи - просто сильно новичок в системе. Пытался построить скрипт на основе аналогичного от pyicq-t. :oops:
Правильно ли использовать в данной ситуации такой код:

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

start_cmd="${name}_start"
stop_cmd=":"

${name}_start()
{
     
}


Только вот не совсем понятно, что писать в данном случае в стартовой части. По факту должен запускаться питонский файл с флагами -d -p пидфайл -c конфигфайл.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 22:33:10

возьмите по примеру любой из /etc/rc.d/

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 23:14:00

Сделал через:

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

stop_cmd="kill `cat /var/run/mrim.pid`"
теперь терзает одно сомнение, а правильно ли это, может есть более правильные методы?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 23:16:13

а кто мешает сделать нормально?
ведь у того сервера есть свой скрипт запуска?
так почему его не разобрать?

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 23:27:52

скрипт запуска (родной) у него был простой как велосипед:

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

#!/bin/sh

./src/mrim.py $*
а разбирать питоновский файл на вопрос поиска функции остановки, что-то пока квалификации не хватает. :smile:

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 23:36:04

так кто мешал питон скрипт от сюда туда заюзать на старт и стоп

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 23:39:17

не могу разобраться... как его корректно останавливать?
mrim.py:

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

#!/usr/local/bin/python2.5

import config
import sys
import getopt
import signal
import os
import hotshot, hotshot.stats

#usage = '''Usage:
#-d        detach from console
#-c file   path to config file
#-s file   analyse the profiling file
#-p file   path to pid file'''

daemon = False
config_file = None
pid = None

try:
	opts, args = getopt.getopt(sys.argv[1:], "hdc:ps:")
except getopt.GetoptError, e:
	print "Can't start:", e.msg
	print usage
	sys.exit(1)

for k,v in opts:
	if k == '-h':
		print usage
		sys.exit(0)
	elif k == '-s':
		s = hotshot.stats.load(v)
		s.strip_dirs()
		s.sort_stats('time', 'calls')
		s.print_stats(20)
		sys.exit(0)
	elif k == '-d':
		daemon = True
	elif k == '-c':
		config_file = v
	elif k == '-p':
		pid = v

if not config_file:
	print usage
	sys.exit(1)

conf = config.Config(config_file)
conf.daemon = daemon
if pid:
	conf.pidfile = pid

if __name__ == "__main__":
	import init
	if conf.profiling:
		pfile = os.path.join(conf.profile_dir, "mrim.prof")
		p = hotshot.Profile(pfile)
		p.runcall(init.start)
		p.close()
	else:
		init.start()
тут есть только одно предположение, что ему нужно дать sys.exit(1). только куда и как что-то не представляю даже.
Последний раз редактировалось CaBa 2009-06-10 23:43:12, всего редактировалось 1 раз.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 23:42:41

ты не понял
я говорил
почему бы команду

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

./src/mrim.py $*
не вставить на старт и стоп
а там уже пусть сам питон работает

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-10 23:49:47

не фунциклирует на старт и стоп. он при стопе в таком случае, ещё один процесс запускает.
и нарисовывается ещё один процесс.
видимо просто скрипт не подразумевает корректную остановку. или я что-то не вкуриваю всё-таки :unknown:

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение paradox » 2009-06-10 23:54:31

конечно не вкурил
там в скрипт нужно передавать параметр $*
который должна быть комманда
а у тебя в обоих случаях получаеться пустое место
и он отрабатывает его по умолчанию

Гость
проходил мимо

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение Гость » 2009-06-11 0:11:55

даа. что такое дерево, почему оно не тонет, и почему оно - я... :-D

если ему в стоп запихнуть явное выражение при котором он делает sys.exit(1), он всего навсего не стартует новый процесс, а вот старый он видимо прибивать не умеет..

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-11 0:23:06

странный листинг для лини, что-то совсем непонятно, как он тут должен останавливаться. :cz2:

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

#!/bin/sh
#
# mrim		This shell script takes care of starting and stopping
#               jabber-mrim standalone Jabber component.
#
# chkconfig: 2345 71 29
# description: Mail.ru transport for Jabberd2  \
#
# processname: mrim
# config: /etc/jabberd2/mrim.conf
# pidfile: /var/run/mrim/mrim.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

MRIM_CONF=/etc/jabber-mrim/mrim.conf
LOCKFILE=/var/lock/subsys/jabber-mrim
PIDFILE=/var/run/jabber-mrim/mrim.pid
MRIM_USER=_jabber_mrim
MRIM_DIR=/usr/share/jabber-mrim
MRIM_EXEC="/usr/share/jabber-mrim/src/mrim.py"

# Check that networking is up.
[ $NETWORKING = "no" ] && exit 0

RETVAL=0

start()
{
	start_daemon \
	--pidfile "$PIDFILE" \
        --lockfile "$LOCKFILE" \
        --user "$MRIM_USER" \
        --name python \
        --displayname jabber-mrim \
        -- "$MRIM_EXEC" -d -c "$MRIM_CONF" -p "$PIDFILE"
	RETVAL=$?
}

stop()
{
	stop_daemon \
	    --pidfile "$PIDFILE" \
	    --lockfile "$LOCKFILE" \
	    --expect-user "$MRIM_USER" \
	    --displayname jabber-mrim \
	    -- python
	RETVAL=$?
}

stat()
{
	status \
	    --pidfile "$PIDFILE" \
	    --lockfile "$LOCKFILE" \
	    --expect-user "$MRIM_USER" \
	    --displayname jabber-mrim \
	    -- python
	RETVAL=$?
}

# See how we were called.
case "$1" in
	start)
		start
		;;
    stop)
		stop
		;;
	restart)
		stop
		start
		;;
    status)
		stat
		;;
*)
	msg_usage "${0##*/} {start|stop|restart|status}"
	RETVAL=1

esac

exit $RETVAL

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение Alex Keda » 2009-06-14 20:54:06

Гость писал(а):даа. что такое дерево, почему оно не тонет, и почему оно - я... :-D
жжёшь! =)
Убей их всех! Бог потом рассортирует...

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-14 21:11:55

:smile: зато правда. тут на самом деле чувствуешь себя дубом. трудновато начинать... но что поделать

P.S. По скрипту в конфе по mrim подсказали делать Kill -INT. :unknown:

Гость
проходил мимо

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение Гость » 2009-06-14 21:22:42

Гость писал(а):две функции
две shell-функции

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-14 21:34:25

так собственно и было описано выше: stop_cmd="kill `cat /var/run/mrim.pid`"

в других транспортах есть проблемы - если их убивать через kill - то не сохраняются последние данные из сессии, например регистрации в транспорте и тд и тп.
тут пока тьфу-тьфу таких проблем нету, вроде все настройки у него живут в xml-файлах.
в общем ХЗ - будем смотреть!.

Гость
проходил мимо

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение Гость » 2009-06-15 1:45:40

CaBa писал(а):в других транспортах есть проблемы - если их убивать через kill - то не сохраняются последние данные из сессии, например регистрации в транспорте и тд и тп.
хм, типа такого?

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

		except KeyboardInterrupt:
			logger.critical('Got SIGINT, closing connections')
			xmpp_con.stop()
			logger.critical('Shutdown')
			sys.exit(0)
так что можно попробовать привязать это действие к SIGTERM (сигнал, кой kill(1) посылает по умолчанию) добавив в mrim.py

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

@@ -35,6 +35,10 @@
 conf = config.Config(config_file)
 conf.daemon = daemon
 
+def quit(signum, frame):
+	raise KeyboardInterrupt
+
 if __name__ == "__main__":
 	import init
+	signal.signal(signal.SIGTERM, quit)
 	init.start()

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-15 8:24:15

Доцент, он не ложится.© :-D
Зато посмотрел в логах - отлично реагирует на команду Kill -INT, в логах видно:
15/06/09-09:16:16 Got SIGINT, closing connections
15/06/09-09:16:16 [ххххххх@mail.ru] Connection closed by ourselves
15/06/09-09:16:16 Shutdown
в итоге: просто в rc.d для mrim запихну stop_cmd="Kill -INT `cat /var/run/mrim.pid`"

В итоге, как говорил мой шеф: Нужно наградить непричастных и наказать невиновных.
Всем спасибо, кто помогал!

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение thefree » 2009-06-15 8:32:38

ну вот теперь есть повод нарисовать порт (:
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

CaBa
мл. сержант
Сообщения: 72
Зарегистрирован: 2009-06-10 22:10:03

Re: Проблемы с rc.d-скриптом

Непрочитанное сообщение CaBa » 2009-06-15 8:50:15

Нужно ли оно кому-то или нет, вот в чём вопрос.
Нужно хандбук по ентому поводу изучить. И можно попробовать с портом.