Как я это ненавижу, но все же приходиться делать.
Ситуация следующая: есть сервер на котором крутиться один единственный проект (и будет крутиться только один
единственный проект), все настройки и все, все заточено под него. Это оговариваю к тому, что ничего другого там не будет,
может это как-то повлияет на способ решения проблемы.
Так вот, дело в том, что мне время от времени надо перезагружать один из сервисов на машине, а именно 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. Но может и другие вменяемые варианты есть?
ЭЭЭ ну ещё можно теоретически пойти на такой вариант.
При нажатии кнопки вэб интерфейса, создаётся к примеру с определённым именем файлик (например в тэмпах), плюс скрип который к примеру, раз в минуту (или во сколько там надо)запускается по крону и смотрит, если такой файлик есть, перегружает там то что надо.....
Хотя тоже не красиво очень, но когда уж очень нужно то можно. Думаю лучше чем suid.
> ЭЭЭ ну ещё можно теоретически пойти на такой вариант. При нажатии кнопки вэб интерфейса, создаётся к примеру с определённым именем файлик (например в тэмпах), плюс скрип который к примеру, раз в минуту (или во сколько там надо)запускается по крону и смотрит, если такой файлик есть, перегружает там то что надо..... Хотя тоже не красиво очень, но когда уж очень нужно то можно. Думаю лучше чем suid.
Я тоже думал над этим... но очень важна интерактивность :(