После релиза cs2 я заметил что панелька не может сама обновлять сервер, да и вообще это полезно, если на сервере случится какой-то баг и игроки тупо не смогут заходить на сервер.
Данный костыль будет каждый час (Или как вам угодно) проверять есть ли на сервере онлайн или нет. Если онлайна нет, то через API птеродактеля перезапустит его.
Костыль будет работать через cron используя код на php.
Нам потребуется:
PHP версии 7.4 и выше.
composer
Ну и сама панель птеродактеля.
Для начала заходим в вашу панель
адрес панели/account/api (т.е. в настройки аккаунта → API Credentials)
После этого создаем API ключ и указываем разрешенный IP для запросов (либо можете оставить пустым, и тогда запросы могут приходить с любого IP без ограничений).
Копируем и записываем в блокнот ваш ключ, ибо посмотреть еще раз вам не дадут!
Потом заходим в панель где консоль вашего сервера и в адресе копируем в блокнот ID сервера (Он понадобится для скрипта)
Теперь приступим к самому коду.
создаем папку с любым названием в домашней директории вашего пользователя откуда будет запускаться скрипт
заходим в папку
и вводим команду (У вас должен быть установлен композер!!!)
Далее создаем в этой папке файл index.php и вставляем код
Теперь нужно проверить работает ли скрипт.
Вводим команду
И если все сделали правильно, то вы должны увидеть это (Также проверьте перезапустился ли ваш сервер):
Если картинка у вас похожая, но сервер не перезапустился, то скорее всего вы указали не тот ID сервера, либо адрес панельки, либо API ключ.
Теперь вводим команду:
И в самом низу вставляем
где */1 это значит, что скрипт будет выполняться каждый час.
Подробнее про крон можете почитать тут
Сохраняем и все готово.
Если не хотите ставить композер и вообще вставлять код, то готовое решение прикрепил специально для ленивых.
Данный костыль будет каждый час (Или как вам угодно) проверять есть ли на сервере онлайн или нет. Если онлайна нет, то через API птеродактеля перезапустит его.
Костыль будет работать через cron используя код на php.
Нам потребуется:
PHP версии 7.4 и выше.
composer
Ну и сама панель птеродактеля.
Для начала заходим в вашу панель
адрес панели/account/api (т.е. в настройки аккаунта → API Credentials)
После этого создаем API ключ и указываем разрешенный IP для запросов (либо можете оставить пустым, и тогда запросы могут приходить с любого IP без ограничений).
Копируем и записываем в блокнот ваш ключ, ибо посмотреть еще раз вам не дадут!
Потом заходим в панель где консоль вашего сервера и в адресе копируем в блокнот ID сервера (Он понадобится для скрипта)
Теперь приступим к самому коду.
создаем папку с любым названием в домашней директории вашего пользователя откуда будет запускаться скрипт
C-подобный:
mkdir ~/srvupdate
заходим в папку
C-подобный:
cd ~/srvupdate
и вводим команду (У вас должен быть установлен композер!!!)
C-подобный:
composer require xpaw/php-source-query-class:2.1
Далее создаем в этой папке файл index.php и вставляем код
PHP:
<?php
require_once('vendor/autoload.php');
$srv = array(
1 => array(
'ip' => '91.122.192.252',
'port' => '27015',
'id' => 'ID сервера'
),
// 2 => array(
// 'ip' => '91.122.192.252',
// 'port' => '27015',
// 'id' => 'ID сервера'
// ),
);
$panelurl = "https://Адрес вашей панельки";
$apikey = "API ключ";
use xPaw\SourceQuery\SourceQuery;
// For the sake of this example
Header( 'Content-Type: text/plain' );
Header( 'X-Content-Type-Options: nosniff' );
define( 'SQ_TIMEOUT', 1 );
define( 'SQ_ENGINE', SourceQuery::SOURCE );
foreach ($srv as $server) {
$info = 0;
$serverid = $server['id'];
$Query = new SourceQuery( );
try
{
$Query->Connect( $server['ip'], $server['port'], SQ_TIMEOUT, SQ_ENGINE );
$info = $Query->GetInfo( );
print_r( $info );
}
catch( Exception $e )
{
echo $e->getMessage( );
}
finally
{
$Query->Disconnect( );
}
if (is_array($info) == true) {
if ($info['Players'] == 0) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "$panelurl/api/client/servers/$serverid/power",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\t\"signal\": \"kill\"\n}",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Content-Type: application/json",
"Authorization: Bearer $apikey"
)
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
echo "Убил процесс";
sleep(5);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "$panelurl/api/client/servers/$serverid/power",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\t\"signal\": \"start\"\n}",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Content-Type: application/json",
"Authorization: Bearer $apikey"
)
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
echo "Запустил сервер";
} else {
echo "На сервере есть онлайн и он не нуждается в перезапуске!";
}
}
}
?>
Теперь нужно проверить работает ли скрипт.
Вводим команду
C-подобный:
php index.php
И если все сделали правильно, то вы должны увидеть это (Также проверьте перезапустился ли ваш сервер):
Если картинка у вас похожая, но сервер не перезапустился, то скорее всего вы указали не тот ID сервера, либо адрес панельки, либо API ключ.
Теперь вводим команду:
C-подобный:
crontab -e
И в самом низу вставляем
C-подобный:
0 */1 * * * php ~/srvupdate/index.php >/dev/null 2>&1
где */1 это значит, что скрипт будет выполняться каждый час.
Подробнее про крон можете почитать тут
Сохраняем и все готово.
Если не хотите ставить композер и вообще вставлять код, то готовое решение прикрепил специально для ленивых.