[SCRIPT] Авто рестарт сервера

Тема в разделе "Веб скрипты (WEB)", создана пользователем root, 5 окт 2014.

  1. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    Авторестарт сервера:

    announce.php
    Код:
    <?php 
    
    
    function tounicode($string) { 
        $rs=""; 
        for($i=0;$i<strlen($string);$i++) { 
            $rs.=$string[$i].chr(0); 
        } 
        return($rs.chr(0).chr(0)); 
    } 
    
    
    function send_announce($announce) { 
        $buf=pack("c",70).tounicode($announce); 
        [email protected]("127.0.0.1","2012",&$errno,&$errstr,5); 
        if ($cachedsocket) { 
            fwrite($cachedsocket,pack("s",(strlen($buf)+2)).$buf); 
            $len=unpack("v",fread($cachedsocket,2)); 
            $rid=unpack("c",fread($cachedsocket,1)); 
            $rs=""; 
            for ($i=0; $i<(($len[1]-4)/4); $i++) { 
                $read=unpack("i",fread($cachedsocket,4)); 
                $rs.=$read[1]; 
            } 
            fclose($cachedsocket); 
            return $rs; 
        } else { 
            return false; 
        } 
    } 
    
    
    send_announce("Через 3 мин рестарт сервера..."); 
    sleep(150); 
    send_announce("Рестарт - выходите из игры!"); 
    sleep(3); 
    send_announce("рестарт ... 30 сек."); 
    sleep(5); 
    send_announce("рестарт ... 25 сек."); 
    sleep(5); 
    send_announce("рестарт ... 20 сек."); 
    sleep(5); 
    send_announce("рестарт ... 15 сек."); 
    sleep(5); 
    send_announce("рестарт ... 10 сек."); 
    sleep(5); 
    send_announce("рестарт ... 5 сек."); 
    sleep(4); 
    send_announce("рестарт ... 1 сек."); 
    sleep(2); 
    ?> 
    restart.bat
    Код:
    @echo off
    rem Авторестартер
    rem Запуск в 10:00
    rem + опимизация
    
    
    set USER=sa
    set PASS=pass
    set SERVER_DIR="F:\Server"
    set PHP_DIR="C:\Program Files (x86)\PHP"
    set srv_log_dir=I:\logd
    set log_dir_date=%date:~6,4%_%date:~3,2%_%date:~0,2%
    set new_log_dir=%srv_log_dir%\log_%log_dir_date%
    
    
    call :colors 17
    echo Server Restart Go ...
    .\sleep.exe 3
    
    
    echo Announce Send...
    %PHP_DIR%\php.exe -q .\announce.php /WAIT
    
    
    echo Kill L2Res...
    call :kill_prog L2Res.exe
    
    
    echo Kill Server...
    call :kill_prog L2Server.exe
    .\sleep.exe 20
    
    
    echo Kill Cached...
    call :kill_prog2 Cached-dll.exe
    
    
    rem + Перезапуск Cached
    
    
    .\sleep.exe 5
    echo Start Cached...
    call :start_prog %SERVER_DIR%\cached Cached-dll.exe
    .\sleep.exe 30
    
    
    echo Kill Cached...
    call :kill_prog Cached-dll.exe
    .\sleep.exe 5
    
    
    echo Kill L2LogD...
    call :kill_prog L2LogD.exe
    .\sleep.exe 5
    
    
    REM echo Check Subjob...
    REM %PHP_DIR%\php.exe -q %SERVER_DIR%\PHP\subjob.php /WAIT
    
    
    REM echo Set Siege...
    REM %PHP_DIR%\php.exe -q .\siege.php /WAIT
    
    
    rem + оптимизация
    
    
    echo Start Optimize...
    
    
    call :logback lin2world
    call :reindex lin2world
    
    
    rem + MSSQLSERVER STOP...
    
    
    net stop MSSQLSERVER
    .\sleep.exe 10
    net start MSSQLSERVER
    .\sleep.exe 3
    
    
    rem +  Бэкапим лог файлы
    
    
    REM IF NOT EXIST %new_log_dir% (
    REM REN %srv_log_dir%\log log_%log_dir_date%
    REM .\sleep.exe 2
    REM start .\srv_log_bak.bat %srv_log_dir% log_%log_dir_date%
    REM )
    
    
    rem + Запуск сервера
    
    
    .\sleep.exe 5
    echo Server Start...
    call :start_prog %SERVER_DIR%\L2Res_0573a L2Res.exe
    
    
    exit
    
    
    REM ==== ФУНКЦИИ
    
    
    :kill_prog
    taskkill /IM %1
    .\sleep.exe 5
    taskkill /IM %1 /F
    .\sleep.exe 1
    exit /b
    
    
    :kill_prog2
    taskkill /IM %1
    .\sleep.exe 30
    taskkill /IM %1 /F
    .\sleep.exe 1
    exit /b
    
    
    :start_prog
    start /D %1 /NORMAL %2
    .\sleep.exe 1
    exit /b
    
    
    :start_app_wait
    echo start /D %1 /NORMAL %2 /WAIT
    start /D %1 /NORMAL %2 /WAIT
    .\sleep.exe 1
    exit /b
    
    
    :logback
    osql -U %USER% -P %PASS% -d %1 -Q "BACKUP LOG [%1] WITH TRUNCATE_ONLY" > .\logback_%1.txt
    osql -U %USER% -P %PASS% -d %1 -Q "DBCC SHRINKFILE(%1_log, 10)" >> .\logback_%1.txt
    exit /b
    
    
    :reindex
    osql -U %USER% -P %PASS% -d %1 -Q "EXECUTE lin_Reindex" > .\reindex_%1.txt
    exit /b
    
    
    :check_db
    osql -U %USER% -P %PASS% -d %1 -Q "ALTER DATABASE %1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE" > .\check_db_%1.txt
    osql -U %USER% -P %PASS% -d %1 -Q "DBCC CHECKDB('%1', REPAIR_ALLOW_DATA_LOSS)" >> .\check_db_%1.txt
    osql -U %USER% -P %PASS% -d %1 -Q "ALTER DATABASE %1 SET MULTI_USER" >> .\check_db_%1.txt
    exit /b
    
    
    :colors
    if /i "%cmode%"=="n" (
    if not "%1"=="17" (    color F    ) else ( color )
    ) else ( color %1 )
    goto :eof
    • Ставим restart.bat в крон на запуск в 10 утра например и все отлично и гарантированно работает.