Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
EARL
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2010-05-24 9:05:18
- Откуда: Тамбов
Непрочитанное сообщение
EARL » 2011-08-03 20:59:19
есть rc скрипт
Код: Выделить всё
#!/bin/sh
#
# PROVIDE: minecraft
# REQUIRE: DAEMON
#
. /etc/rc.subr
name="minecraft"
rcvar=${name}_enable
stop_cmd=minecraft_stop
screen=/usr/local/bin/screen
java=/usr/local/bin/java
java_args="-Xincgc -Xmx1G -jar craftbukkit-0.0.1-SNAPSHOT.jar"
command=$screen
command_args="-A -m -d -S mine $java $java_args"
load_rc_config ${name}
eval ": \${${name}_enable:=\"NO\"}"
minecraft_stop()
{
pid=`ps -aux | grep diablo | grep -v grep | awk '{ print $2; }'`
if [ -z $pid ]; then
echo "$name not running?"
exit
fi
kill -15 $pid
echo "Stopping $name"
}
run_rc_command $1
Но в данном случае скрипт отказывается стартовать, если в списке процессов есть уже запущенный экземпляр screen. Поэтому хочу добавить функцию minecraft_start() и в ней запускать процесс, но только не понятно как узнать pid запущенного в screen процесса?
EARL
-
Хостинг 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/
-
kpp
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
-
Контактная информация:
Непрочитанное сообщение
kpp » 2011-08-04 10:48:22
Получить PID screen-а, получить все процессы, родителем для кот. является PID screen-а, потом по каждому полученному пройти рекурсивно.
Так получится список процессов, предком которых является процесс screen.
Получить PPID (PID родителя) в ps ключ -j
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
kpp
-
EARL
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2010-05-24 9:05:18
- Откуда: Тамбов
Непрочитанное сообщение
EARL » 2011-08-04 13:13:16
Примерно понял идею. Попробую. Спасибо
EARL
-
EARL
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2010-05-24 9:05:18
- Откуда: Тамбов
Непрочитанное сообщение
EARL » 2011-08-04 15:52:02
Сделал так
Код: Выделить всё
#!/bin/sh
#
# PROVIDE: minecraft
# REQUIRE: DAEMON
#
. /etc/rc.subr
name="minecraft"
rcvar=${name}_enable
start_cmd=minecraft_start
stop_cmd=minecraft_stop
screen=/usr/local/bin/screen
java=/usr/local/bin/java
java_args="-Xincgc -Xmx1G -jar craftbukkit-0.0.1-SNAPSHOT.jar"
command=$screen
command_args="-A -m -d -S mine $java $java_args"
load_rc_config ${name}
eval ": \${${name}_enable:=\"NO\"}"
minecraft_start()
{
user=$(eval echo "\${${name}_user}")
pid=`ps -U $user | grep java | grep craftbukkit | awk '{ print $1; }'`
if [ "$pid" = "" ]; then
echo "Starting $name."
dir=$(eval echo "\${${name}_chdir}")
su -l $user -c "cd $dir && $command $command_args"
else
echo "$name already running? (pid=$pid)."
fi
}
minecraft_stop()
{
user=$(eval echo "\${${name}_user}")
pid=`ps -U $user | grep java | grep craftbukkit | awk '{ print $1; }'`
if [ "$pid" = "" ]; then
echo "$name not running?"
else
echo "Stopping $name"
kill -15 $pid
fi
}
run_rc_command $1
EARL