LINUX.ORG.RU
ФорумAdmin

Выполнение команд из под веб-сервера


0

0

Как я это ненавижу, но все же приходиться делать.

Ситуация следующая: есть сервер на котором крутиться один единственный проект (и будет крутиться только один 
единственный проект), все настройки и все, все заточено под него. Это оговариваю к тому, что ничего другого там не будет, 
может это как-то повлияет на способ решения проблемы.

Так вот, дело в том, что мне время от времени надо перезагружать один из сервисов на машине, а именно racoon.

Для перезапуска я написал bash script, который вызывается из веб-приложения. Сам скрипт:

# cat restart.racoon
#!/bin/bash

TIMELIMIT=30
TIMEEXPIRE=`date '+%H:%M' --date="(date) -$TIMELIMIT minutes"`
CONF="/etc/racoon/racoon.conf"
PROC=( `ps -Aeo pid,comm,start_time | grep racoon` )
if [ ${PROC[1]} == "racoon" ]
        then
        if [ ${PROC[2]} \< $TIMEEXPIRE ]
                then `killall ${PROC[1]}`
                while [ `echo $?` != 0 ]
                        do `killall ${PROC[1]}`
                done
                `/usr/sbin/racoon -f $CONF`
                if [ `echo $?` == 0 ]
                        then exit 0
                else
                        exit 0
                fi
        else
                exit 2
        fi
else
        `/usr/sbin/racoon -f $CONF`
        if [ `echo $?` == 0 ]
                then exit 0
        else
                exit 1
        fi
fi

Ни в коем случае не претендую на то, что это оптимальный и оптимизированный скрипт, но все же работает. Работает, 
если запускать из под root'a. Как вы видите используются две утилиты: /usr/sbin/racoon и killall. Понятное дело, что 
для использования и той и другой утилиты, необходимы права root'a.

Так вот собственно и проблема, каким образом заставить работать этот скрипт, когда он запускается из под apache?

Из вариантов в голову лезет, только sudo. Но может и другие вменяемые варианты есть?
★★★

Апачевский suexec вроде не умеет да от рута пускать cgi/ssi скрипты? Может тогда банально suid root?

xio
()

ЭЭЭ ну ещё можно теоретически пойти на такой вариант. При нажатии кнопки вэб интерфейса, создаётся к примеру с определённым именем файлик (например в тэмпах), плюс скрип который к примеру, раз в минуту (или во сколько там надо)запускается по крону и смотрит, если такой файлик есть, перегружает там то что надо..... Хотя тоже не красиво очень, но когда уж очень нужно то можно. Думаю лучше чем suid.

mtr
()
Ответ на: комментарий от mtr

> ЭЭЭ ну ещё можно теоретически пойти на такой вариант. При нажатии кнопки вэб интерфейса, создаётся к примеру с определённым именем файлик (например в тэмпах), плюс скрип который к примеру, раз в минуту (или во сколько там надо)запускается по крону и смотрит, если такой файлик есть, перегружает там то что надо..... Хотя тоже не красиво очень, но когда уж очень нужно то можно. Думаю лучше чем suid.

Я тоже думал над этим... но очень важна интерактивность :(

VirRaa ★★★
() автор топика
Ответ на: комментарий от VirRaa

>Я тоже думал над этим... но очень важна интерактивность

1. inotify

2. Use pipe (mkfifo)

sdio ★★★★★
()

А почему sudo невменяемый вариант? :)

Прописываешь юзеру, из-под которого работает апач, единственное разрешение и всё.

Deleted
()
Ответ на: комментарий от Deleted

> Прописываешь юзеру, из-под которого работает апач, единственное разрешение и всё.

Так и буду делать.

VirRaa ★★★
() автор топика
Ответ на: комментарий от VirRaa

во во sudo или cron - пишешь через веб в какойнить файл , а скрипт из крона проверяет и соответсвенно запускает .

j262 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.