Запуск виндового Ventrilo сервера под WINE в Linux: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Настройка автоматического запуска)
м (Защищена страница «Запуск виндового Ventrilo сервера под WINE в Linux» ([edit=autoconfirmed] (бессрочно) [move=autoconfirmed] (бессрочно)))
 
(не показана 1 промежуточная версия 1 участника)
Строка 147: Строка 147:
 
И пробуем запустить ventrilo руками
 
И пробуем запустить ventrilo руками
 
<pre># service ventrilo start</pre>
 
<pre># service ventrilo start</pre>
 +
==Проверка и перезапуск сервера из cron==
 +
У меня как то упал сервер ventrilo, а я об этом даже не знал. Пришлось написать скриптик, который проверяет - запущен ли процесс сервера ventrilo, и если нет, то перезапускает сервис.<br />
 +
Вот сам скрипт '''/etc/scripts/ventr_exist.sh'''
 +
<pre>
 +
#!/bin/bash
 +
#set -x
 +
VENPATH=/home/ventrilo/ventsrv
 +
VENBIN=$VENPATH/ventrilo_srv.exe
 +
VENPID=$VENPATH/ventrilo.pid
 +
 +
#PID=`ps -ef | grep -i $VENBIN | grep -v grep | awk {'print $2'} | head -1`
 +
PID=`pgrep -U ventrilo -f $VENBIN`
 +
if [ -z "$PID" ]; then
 +
    if [ -s $VENTPID]; then
 +
        rm $VENPID
 +
    fi
 +
    service ventrilo start
 +
    echo "`date`" >> /etc/scripts/ventrilo.bug
 +
fi
 +
</pre>
 +
В '''/etc/crontab''' прописываем проверку сервера каждые пол часа.
 +
<pre>
 +
# Проверка работы вентрило сервера
 +
30 * * * * root /etc/scripts/ventr_exist.sh
 +
</pre>

Текущая версия на 09:14, 26 апреля 2010

И так у нас есть Venrilo сервер для WINDOWS. А мы хотим, что бы он стоял на нашем Linux сервере.

Подготовка Linux машины

1. Устанавливаем Wine, если не был установлен

# urpmi wine

2. На Linux сервере создаем пользователя из под которого будет работать Ventrilo сервер.

# useradd -s /bin/false ventrilo

Установка сервера на виндовой машине

  1. Берем дистрибутив Ventrilo сервера и устанавливаем его на машину с Windows.
  2. Копируем файлы из директории c:\Program Files\VentSrv на Linux сервер в папку /home/ventrilo/ventsrv

Настройка автоматического запуска

Создаем файл /etc/rc.d/init.d/ventrilo,

#!/bin/sh                                     

#For ventrilo server v3.x                         
#                                                 
#/etc/rc.d/init.d/ventrilo                 
#                                                 
# chkconfig: 255 99 10                            
#                                                                      
### BEGIN INIT INFO                                                    
# Provides: atd at                                                     
# Default-Start: 3 4 5                                                 
# Short-Description: Starts the at daemon                              
# Description: Runs commands scheduled by the at command at the time   
#              specified when at was run, and runs batch commands when 
#              the load average is low enough.                         
### END INIT INFO                                                      

# Source function library.
#set -x                   
# Source function library.
if [ -f /etc/init.d/functions ] ; then
  . /etc/init.d/functions             
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions               
else                                         
  exit 0                                     
fi                                           

# Source networking configuration.
. /etc/sysconfig/network          

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Check that smb.conf exists.
#[ -f /etc/samba/smb.conf ] || exit 0

RETVAL=0

#Replace the values of VENPATH and VENSRV with your ventrilo path and server name. 
#Replace the value of VENUSER with the account name that ventrilo runs under.      

VENPATH=/home/ventrilo/ventsrv                                                     
VENBIN=$VENPATH/ventrilo_srv.exe                                                   
VENUSER=ventrilo                                                                   
VENPID=$VENPATH/ventrilo.pid                                                       
#set -x                                                                            
if [ "$UID" -ne 0 ]                                                                
then                                                                               
        echo "You must be root to run this script"                                 
        exit 64                                                                    
fi                                                                                 

#1=3784
if [ -e $VENPID ]
    then         
        PID=`cat $VENPID`
    else                 
        PID=0            
    fi                   


start() {
    if [ $PID -eq 0 ]; then     # Если не запущена ventrilo, то запустить
        cd $VENPATH                                                      
        chmod 666 ventrilo_srv.ini                                       
        su $VENUSER -s "/bin/bash" -c "wine $VENBIN &"                   
        sleep 1            # Пауза нужна для времени запуска сервера
        PID=`ps -ef | grep -i $VENBIN | grep -v grep | awk {'print $2'} | head -1`
        if [ -n "$PID" ]; then                                                    
            echo $PID  > $VENPID                                                  
            echo "Ventrilo server start on port 3780  with pid $PID"              
        else                                                                      
            echo "Error starting ventrilo server"                                 
        fi                                                                        
    else                                                                          
        echo "Ventrilo is allrady exist"                                          
    fi                                                                            
}                                                                                 


stop(){
#check_pid 3784
if [ $PID -ne 0 ]
then             
        kill $PID
        rm $VENPID
        echo ""   
        echo "Ventrilo server on Port:"3784" with PID:"$PID" Stopped."
        echo ""                                                       
else                                                                  
        echo ""                                                       
        echo "ERROR Ventrilo server on Port:"3780" Not Running."      
        echo ""                                                       
        exit 67                                                       
fi                                                                    
}                                                                     

status(){
#check_pid 3784
if [ $PID -ne 0 ];then
        echo ""
        echo "Ventrilo server on Port:"3784" is runnind with PID:"$PID""
        echo ""
        PID=0
else
        echo ""
        echo "Ventrilo server on Port:"3780" Not Running."
        echo ""

fi
}


# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    *)
        gprintf "Usage: %s {start|stop|status}"
        exit 1
esac

exit $RETVAL

Меняем права на файлы

# chmod 700 /etc/rc.d/init.d/ventrilo
# chown -R ventrilo:ventrilo /home/ventrilo

С помощью утилиты drakxservices делаем автоматический запуск ventrilo при загрузке.
И пробуем запустить ventrilo руками

# service ventrilo start

Проверка и перезапуск сервера из cron

У меня как то упал сервер ventrilo, а я об этом даже не знал. Пришлось написать скриптик, который проверяет - запущен ли процесс сервера ventrilo, и если нет, то перезапускает сервис.
Вот сам скрипт /etc/scripts/ventr_exist.sh

#!/bin/bash
#set -x
VENPATH=/home/ventrilo/ventsrv
VENBIN=$VENPATH/ventrilo_srv.exe
VENPID=$VENPATH/ventrilo.pid

#PID=`ps -ef | grep -i $VENBIN | grep -v grep | awk {'print $2'} | head -1`
PID=`pgrep -U ventrilo -f $VENBIN`
if [ -z "$PID" ]; then
    if [ -s $VENTPID]; then
        rm $VENPID
    fi
    service ventrilo start
    echo "`date`" >> /etc/scripts/ventrilo.bug
fi

В /etc/crontab прописываем проверку сервера каждые пол часа.

# Проверка работы вентрило сервера
30 * * * * root /etc/scripts/ventr_exist.sh