Автор Тема: Изпълнение на баш скрипт през апаче уеб сървър  (Прочетена 1755 пъти)

h7d8

  • Участник
  • *****
  • Публикации: 197
  • Distribution: Debian;Ubuntu
  • Window Manager: Gnome
    • Профил
Не е точно така, искаш потребител, който няма право, да убие процес на друг потребител, затова ти се дъни.

я покажи командата pppd с какви правa е?


има лесен начин да правиш това през уеб сървъра, но не е много красив. Пишеш в 1 файл със скрипта, като примерно има само 0 или 1 във файла.
Пускаш един крон с root и проверяваш на всяка минута какво има във файла. Ако има 1, пускаш pon и poff и записваш 0. Ако пише 0, само exit. Собственик на файла е уеб сървъра... :)

Ще пробвам този вариант,ако имаш написан скрипт тестван може да подхвърлиш нещо.Ако нямаш аз ще го напиша само да имам време и ще го постна.Този вариант е по-добър.Май я карам парлапанската ( дали заради времето или пак заради времето ),само да не ми излезе през ноздрите. :) Благодаря!  [_]3
Активен

wfw

  • Участник
  • *****
  • Публикации: 247
  • Distribution: Debian
  • Window Manager: none
    • Профил
най-лесния начин да запишеш 1 във файла, когато  искаш да ресетнеш според мен е:
Код:
#!/bin/bash
echo 1 > /path/to/file

после за крон-а, нещо от рода на:

Код:
#!/bin/bash
value = `cat /path/to/file`
if [ $value == 1]
then
/etc/init.d/poff
/etc/init.d/pon
echo 0 > /path/to/file
fi

не съм го тествал дали работи, но трябва да е нещо близко до това
« Последна редакция: Jul 04, 2014, 20:57 от wfw »
Активен

edmon

  • Гост
SuExec
CGI
Са все неща които може да провериш, защо съществуват и кой келеш ги е измислил!:)
Активен

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Цитат
cat 1 > /path/to/file

Освен ако нямаш файл кръстен "1" със съдържание "1", това няма да сработи.
Активен

"Knowledge is power" - France is Bacon

wfw

  • Участник
  • *****
  • Публикации: 247
  • Distribution: Debian
  • Window Manager: none
    • Профил
моя грешка.
echo 1 > /path/to/file
Активен

h7d8

  • Участник
  • *****
  • Публикации: 197
  • Distribution: Debian;Ubuntu
  • Window Manager: Gnome
    • Профил
Снощи ми остана малко време да прегледам до къде бях стигнал и какво в крайна сметка ще се получи от всичко до момента по темата.Днес също заделих малко време,защото смятам че е редно да публикувам крайния резултат и за в бъдеще да сработи идеята и при друг.

index.html
Код:
<html>
<body>
 <form><input type="button" value="Reset" onClick="window.location.href='inet.php'"></form>
</body>
</html>

inet.php
Код:
<?php
exec('/home/user/public_html/all/inet/resetnet.sh');
?>

resetnet.sh
Код:
#!/bin/bash
echo 1 > /home/user/public_html/all/inet/data

Файловете index.html inet.php resetnet.sh се намират в директория,която се индексира от апачето и юзър различен от root.

Под root се изпълняват следните файлове: inet.sh resetnet.sh (resetnet.sh е с различно съдържание от предходния!За удобство може да му бъде променено името,но и да бъде отразено в останалите файлове.)

inet.sh
Код:
#!/bin/bash
data="/home/user/public_html/all/inet/data"
c="cat"
script="/root/resetnet.sh"
if [ `$c $data` == "1" ] ; then $script
fi
echo 0 > $data

resetnet.sh
Код:
#!/bin/bash
# reconnect the connection
time=$(date +"%d-%m-%Y @ %H:%M:%S")
    poff -a
    pon dsl-provider
    sleep 3
echo $time >> /root/inet.log
exit 0

root@beast:~#
crontab -l
* * * * * /root/inet.sh >/dev/null 2>&1
root@beast:~#

Скрипта се изпълнява всяка минута и проверява във файл data дали е 1 или 0,ако е 1 скрипта сваля pppoe връзката после я вдига и логва във файл inet.log
Файла data съм го направил с права на апаче юзър и групата ( chown -R www-data:www-data data - така апачето може да записва 1 или 0 в този файл..при мен е www-data т.е дебиан )

root@beast:~# ls -la /home/user/public_html/all/inet/data
-rwxr-xr-x 1 www-data www-data 2 Jul 15 20:38 /home/user/public_html/all/inet/data
root@beast:~#

Ако използвате този метод - дистанционно и ръчно да сваляте и вдигате пппое връзката  е важно да ограничите достъпа до index.html до определен адрес,адреси или цяла подмрежа.Защо ми беше нужно това?Днс-ите на доставчика ми се шашкат (може и рутера при мен) и от време на време трябва да се убие пппое връзката,а после да се вдигне,а когато не сте наблизо или нямате време идва на помощ довереник,който без роот достъп да свърши тази задача.Към момента не коментирам възможността с реализация на скрипт,който да пингва даден адрес и ако има проблем с връзката да направи същото.Очаквам мнения и решения за нещо по читаво като изпълнение. :) Благодаря на съфорумците,които се включиха и ми спестиха време и нерви.Идеята не е моя и затова по [_]3 на автора и.

Активен