IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Пингвинятник (ОС *NIX) (http://www.imho.ws/forumdisplay.php?f=76)
-   -   Скриптеры! Помогите. (http://www.imho.ws/showthread.php?t=121548)

Stereoz 15.07.2007 20:41

Скриптеры! Помогите.
 
Суть: не для кого не секрет, что в большенстве дистрибутивов не работают конфигураторы pptp подключений. и их приходится поднимать в ручную, для этого я написал скрипт:
#! /bin/bash
. /etc/rc.d/init.d/functions
case "$1" in
up)
echo "Подключается интернет..."
pppd call lanpolis
echo "Добавить маршрут? y or n?"
read x
case $x in
y)
route add default ppp0
echo "Маршрут добавлен"
;;
*)
echo "Маршрут не добавлен"
esac
echo "OK - Made by Stereoz"
;;
down)
echo "Отключается интернет..."
ПРОБЛЕМА ТУТ
echo "ОК - Made by Stereoz"
;;
*)
echo "Неверный параметр $1"
exit 1
esac
exit 0

Проблема с отключением интернета если тупо вводить ifconfig ppp0 down то процесс не убивается, и следующее подключение идет через ppp1 и т.д. процесс можно убить kill PID но скрипт то не знает какой id он только знает какой Pname, как можно получить переменную возвращающую id процесса зная его имя? Заранее спасибо тем кто откликницца!!!

pnp2000 15.07.2007 21:56

а если за'grep'пить вывод top и оттуда уже выдрать PID ????

ZogG 15.07.2007 23:42

killall 'process name'

Stereoz 16.07.2007 10:14

Во-первых из топа выдрать не получится, а только из ps -e pppd | grep -i pppd но тогда можно получить переменную типа PID TIME PNAME. а вообще как сказать бэшу что бы он работал, с переменной как со строкой, по аналогии с паскалем? to ZorG спасибо.

Drakosha 16.07.2007 11:47

ещё pkill есть

Gennadi 16.07.2007 18:53

Попробуй так....

Цитата:

#! /bin/bash
. /etc/rc.d/init.d/functions
PPP_PID=/var/run/ppp.pid
case "$1" in
up)
if [ -f $PPP_PID ]
then
echo -n "Internet уже подключён..."
else
echo -n "Подключается интернет..."
pppd call lanpolis > /dev/null 2>&1 &
echo $! > $PPP_PID
echo "PPP started. PID:$!"
fi

echo "Добавить маршрут? y or n?"
read x
case $x in
y)
route add default ppp0
echo "Маршрут добавлен"
;;
*)
echo "Маршрут не добавлен"
esac
echo "OK - Made by Stereoz"
;;
down)

if [ ! -f $PPP_PID ]
then
echo -n "PPP is down!!!"
else
echo -n "Internet отключается....."
kill -9 `cat $PPP_PID`
rm $PPP_PID
echo "Internet отключён...."
fi

;;
*)
echo "Неверный параметр $1"
exit 1
esac
exit 0

Stereoz 16.07.2007 22:06

ЭЭЭ да. единственное что не понятно это (последние 6 символов)
pppd call lanpolis > /dev/null 2>&1 &
Пасибо тебе, но только она не работает как надо, короче через раз работает. пишет что нет такого устройства, ну да ладно а вообще я сократил свою до:
#! /bin/bash
. /etc/rc.d/init.d/functions
case "$1" in
up)
echo "Подключается интернет..."
pppd call lanpolis
sleep 2
route add default ppp0
;;
down)
echo "Отключается интернет..."
killall pppd
;;
*)
echo "Неверный параметр $1"
exit 1
esac
echo "OK - Made by Stereoz"
exit 0
Все замечательно работает!!!!!:yees:

ZogG 17.07.2007 01:27

поиграйся с pgrep и pidof

Gennadi 17.07.2007 23:43

Это же элементарный init-script... например назовём его - "progd"

На этом примере стартует "konqueror" ( можешь свою прогу таким образом запускать... ) и пишет номер процесса в файл "/var/run/prog.pid"

/etc/init.d/progd {start|stop|restart|status}


Цитата:

#! /bin/bash
BIN_PROG="konqueror"
PROG_PID=/var/run/prog.pid
case "$1" in
start)
if [ -f $PROG_PID ]
then
echo -e "Программа уже стартовала..."
else
echo -e "Программа стартует..."
$BIN_PROG > /dev/null 2>&1 &
echo $! > $PROG_PID
echo -e "Программа стартовала. PID:$!"
fi
;;
stop)
if [ ! -f $PROG_PID ]
then
echo -e "Программа выключёна!!!"
else
echo -e "Программа отключается....."
kill -9 `cat $PROG_PID`
rm $PROG_PID
echo -e "Программа выключёна...."
fi
;;
restart)
progd stop
sleep 2
progd start
;;
status)
if [ -f $PROG_PID ]
then
echo -e "Программа уже стартовала..."
else
echo -e "Программа выключёна...."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0

Zes 23.07.2007 02:16

Цитата:

Сообщение от Gennadi (Сообщение 1437621)
Это же элементарный init-script... например назовём его - "progd"

На этом примере стартует "konqueror" ( можешь свою прогу таким образом запускать... ) и пишет номер процесса в файл "/var/run/prog.pid"

/etc/init.d/progd {start|stop|restart|status}

с PIDом проблемка только может быть если процесс сдох неестественной смертью (не через init или
запускной скрипт),так что совет если файлик есть,то If-ом проверить бегает ли процесс.

P.S Кстати,можно поиграться с lsof,посмотреть какие процессы держат тот или иной файл,включая дивайс файлы

dr-evil 16.08.2007 13:07

а еще можно построить что-то вида
ps aux | grep process | awk
и получить искомое )


Часовой пояс GMT +4, время: 10:38.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.