Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
CaBa
- проходил мимо
Непрочитанное сообщение
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"
Может подскажете куда рыть?
CaBa
-
Хостинг HostFood.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/
-
CaBa
- проходил мимо
Непрочитанное сообщение
CaBa » 2009-06-10 22:07:01
Да в том то и дело, что pid-файл создаётся и в файле правильный PID процесса. Но вот проблема - не останавливает и всё.
CaBa
-
paradox
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Непрочитанное сообщение
paradox » 2009-06-10 22:14:15
я вообще там невижу не команду запуска ни команду остановки
paradox
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-10 22:28:15
Сорри конечно за такие вещи - просто сильно новичок в системе. Пытался построить скрипт на основе аналогичного от pyicq-t.
Правильно ли использовать в данной ситуации такой код:
Код: Выделить всё
start_cmd="${name}_start"
stop_cmd=":"
${name}_start()
{
}
Только вот не совсем понятно, что писать в данном случае в стартовой части. По факту должен запускаться питонский файл с флагами -d -p пидфайл -c конфигфайл.
CaBa
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-10 23:14:00
Сделал через:
теперь терзает одно сомнение, а правильно ли это, может есть более правильные методы?
CaBa
-
paradox
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Непрочитанное сообщение
paradox » 2009-06-10 23:16:13
а кто мешает сделать нормально?
ведь у того сервера есть свой скрипт запуска?
так почему его не разобрать?
paradox
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-10 23:27:52
скрипт запуска (родной) у него был простой как велосипед:
а разбирать питоновский файл на вопрос поиска функции остановки, что-то пока квалификации не хватает.
CaBa
-
paradox
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Непрочитанное сообщение
paradox » 2009-06-10 23:36:04
так кто мешал питон скрипт от сюда туда заюзать на старт и стоп
paradox
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
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 раз.
CaBa
-
paradox
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Непрочитанное сообщение
paradox » 2009-06-10 23:42:41
ты не понял
я говорил
почему бы команду
не вставить на старт и стоп
а там уже пусть сам питон работает
paradox
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-10 23:49:47
не фунциклирует на старт и стоп. он при стопе в таком случае, ещё один процесс запускает.
и нарисовывается ещё один процесс.
видимо просто скрипт не подразумевает корректную остановку. или я что-то не вкуриваю всё-таки
CaBa
-
paradox
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Непрочитанное сообщение
paradox » 2009-06-10 23:54:31
конечно не вкурил
там в скрипт нужно передавать параметр $*
который должна быть комманда
а у тебя в обоих случаях получаеться пустое место
и он отрабатывает его по умолчанию
paradox
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2009-06-11 0:11:55
даа. что такое дерево, почему оно не тонет, и почему оно - я...
если ему в стоп запихнуть явное выражение при котором он делает sys.exit(1), он всего навсего не стартует новый процесс, а вот старый он видимо прибивать не умеет..
Гость
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-11 0:23:06
странный листинг для лини, что-то совсем непонятно, как он тут должен останавливаться.
Код: Выделить всё
#!/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
CaBa
-
Alex Keda
- стреляли...
- Сообщения: 35466
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2009-06-14 20:54:06
Гость писал(а):даа. что такое дерево, почему оно не тонет, и почему оно - я...
жжёшь!
Убей их всех! Бог потом рассортирует...
Alex Keda
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-14 21:11:55
зато правда. тут на самом деле чувствуешь себя дубом. трудновато начинать... но что поделать
P.S. По скрипту в конфе по mrim подсказали делать Kill -INT.
CaBa
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2009-06-14 21:22:42
Гость писал(а):две функции
две
shell-функции
Гость
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-14 21:34:25
так собственно и было описано выше: stop_cmd="kill `cat /var/run/mrim.pid`"
в других транспортах есть проблемы - если их убивать через kill - то не сохраняются последние данные из сессии, например регистрации в транспорте и тд и тп.
тут пока тьфу-тьфу таких проблем нету, вроде все настройки у него живут в xml-файлах.
в общем ХЗ - будем смотреть!.
CaBa
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 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
Непрочитанное сообщение
CaBa » 2009-06-15 8:24:15
Доцент, он не ложится.©
Зато посмотрел в логах - отлично реагирует на команду 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`"
В итоге, как говорил мой шеф: Нужно наградить непричастных и наказать невиновных.
Всем спасибо, кто помогал!
CaBa
-
thefree
- лейтенант
- Сообщения: 980
- Зарегистрирован: 2008-12-29 9:23:19
- Откуда: Весёлая Страна
Непрочитанное сообщение
thefree » 2009-06-15 8:32:38
ну вот теперь есть повод нарисовать порт (:
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
thefree
-
CaBa
- мл. сержант
- Сообщения: 72
- Зарегистрирован: 2009-06-10 22:10:03
Непрочитанное сообщение
CaBa » 2009-06-15 8:50:15
Нужно ли оно кому-то или нет, вот в чём вопрос.
Нужно хандбук по ентому поводу изучить. И можно попробовать с портом.
CaBa