Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 05.07.2016
Quote:
Только вот это не обязательно:
|
Я уже убрал это. Понял этот момент.
И вот тут в цикле немного поправил, вернее
ZiGGi поправил:
old
PHP Code:
for (new i = 0; i < strlen(str_fmt_log); i++)
{
fputchar(handle, str_fmt_log[i], false);
}
new
PHP Code:
for (new i = 0, len = strlen(str_fmt_log); i < len; i++)
{
fputchar(handle, str_fmt_log[i], false);
}
Quote:
По крайней мере будет известно, сколько файлов открыто на момент возникновения проблемы. Даже если 0, то это тоже важный результат.
|
Попробую. Надо будет тогда ждать, пока опять сбой будет)
Quote:
Либо проблема в чем-то другом
|
Я отключал файлы по одному, оставил только
лог и
db базы геоип (базами db несколько лет пользовался и проблем не было). По сути в моде
только лог работал - и всё равно произошёл этот сбой => я пришёл к выводу, что в нём проблемка)
Quote:
Как создаются папки под логи?
|
Я их
вручную создал.
Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 26.07.2016
stabker вообщем вчера случился очередной сбой, вот вырезка с клиентского лога:
[16:35:15] [join] Nickname has joined the server (...)
[16:35:15] Не удалось открыть файл 'bans/bans.ini'
[16:35:15] На данный момент открыто файлов: 0
[16:35:15] Не удалось создать/открыть файл лога 'log/2016/07/log_25.07.16.txt'
[16:35:17] На данный момент открыто файлов: 0
Во всех случаях написало, что 0 открыто.
На фоне этого сбоя я выявил, что даже файл
samp.ban не работает (самповский бан).
Я забанил чувака и в
samp.ban не записался бан. Это явно подозрительно, если даже самповский бан не открылся для записи.
После перезагрузки конечно всё работает, ну я же не буду постоянно перезагружать сервер. Как быть дальше?)
Re: Сбой чтения файлов в папке scriptfiles -
stabker - 26.07.2016
Тогда не знаю. Если даже samp.ban не работает, то значит тут что-то другое.
Re: Сбой чтения файлов в папке scriptfiles -
DartfoL - 26.07.2016
в чём проблема сделать автоматическую перезагрузку сервера раз в сутки (ночью, например?)
Re: Сбой чтения файлов в папке scriptfiles -
stabker - 26.07.2016
Хотя нет, не факт, что тут что-то другое. Я проверил такой код
PHP Code:
new count;
while(fopen("somefile.txt", io_write))
{
count++;
}
printf("Открыто максимальное количество файлов: %d", count);
SendRconCommand("banip 144.144.144.144");
т.е. открыл максимально возможное количество файлов, и в итоге айпишник тоже не забанился.
Quote:
Originally Posted by DartfoL
в чём проблема сделать автоматическую перезагрузку сервера раз в сутки (ночью, например?)
|
Кстати, это натолкнуло меня на одну мысль. Если у него рестарт через gmx, то код, который я давал, не сработает правильно, ведь после каждого рестарта массив будет очищаться, но файлы так и будут открыты.
Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 26.07.2016
Если не решу проблему в ближайшее время, то буду вынужден поставить автоматическую перезагрузку сервера раз в сутки в 5 утра например.
Через
gmx перезагружать опасно, ибо могут быть баги. У меня сервер может автоматом перезагружаться через
exit и сам подниматься после перезагрузки.
Re: Сбой чтения файлов в папке scriptfiles -
stabker - 26.07.2016
Quote:
Originally Posted by Diman777
Если не решу проблему в ближайшее время, то буду вынужден поставить автоматическую перезагрузку сервера раз в сутки в 5 утра например.
Через gmx перезагружать опасно, ибо могут быть баги. У меня сервер может автоматом перезагружаться через exit и сам подниматься после перезагрузки.
|
А щас он вообще не перезагружается?
Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 26.07.2016
Сам нет, потому что зачем мне это - если мод мог без перезагрузок неделями работать (если нет обновлений).
А щас всё происходит так: сервер работает без перезагрузок дней 5 и случается сбой.
Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 04.01.2017
Проблема актуальна. Всё тоже самое, но уже не 5-ом дне сбой, а на 2-ом (онлайн вырос и видимо что-то накапливается в быстром темпе, и как приходит предел - файлы не читаются).
Даже в клиентский бан-лист нельзя записать ип-адрес. Все файлы отрубились (банлист, базы SQL), за исключением клиентского лога server_log.txt. При этом сервер не падает, работает норм, игроки не жалуются.
Есть вариант - отключить серверный лог (его код я кидал выше) и посмотреть, что будет.
После перезагрузки (exit) - всё работает как обычно, но постоянно перезагружать мод бред.
Re: Сбой чтения файлов в папке scriptfiles -
eakwarp - 04.01.2017
Quote:
Originally Posted by Diman777
Проблема актуальна. Всё тоже самое, но уже не на 5 дней сбой, а на 2-ом (онлайн вырос и видимо что-то накапливается в быстром темпе, и как приходит предел - файлы не читаются).
Даже в клиентский бан-лист нельзя записать ип-адрес. Все файлы отрубились (банлист, базы SQL), за исключением клиентского лога server_log.txt. При этом сервер не падает, работает норм, игроки не жалуются.
Есть вариант - отключить серверный лог (его код я кидал выше) и посмотреть, что будет.
После перезагрузки (exit) - всё работает как обычно, но постоянно перезагружать мод бред.
|
Возможно, проблема в том, что каждое открытие файла в сессии сервера, это n+1
new File:f=fopen("file.txt", io_read);
когда будет открытие под номером 4294967296/2+1 переменная нового открытия уйдет в минус, и все проверки на if(f) идут по бороде.
Хороший выход - сжечь нафиг файлы раз и навсегда.
Плохой выход - if(f!=0)
Re: Сбой чтения файлов в папке scriptfiles -
stabker - 04.01.2017
Должен заметить, что if(f) не пойдет по бороде, если значение f будет меньше 0.
Re: Сбой чтения файлов в папке scriptfiles -
DartfoL - 04.01.2017
Quote:
После перезагрузки (exit) - всё работает как обычно, но постоянно перезагружать мод бред.
|
вовсе не бред, тройка крупнейших проектов давно уже практикуют такое не просто так, а как раз из-за аналогичных аномальных багов после длительной работы сервера
Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 04.01.2017
Повторно кину лог, который щас работает. Ничего особенного, казалось бы.
PHP Code:
// Макс. длина одной строки в логе (время + группа + текст)
const MAXLEN_STR_LOG = 300;
new str_log[STRING_256];
#define Log(%1,%2,%3);\
{format(str_log, STRING_256, %2, %3);\
_Log(%1, str_log);}
_Log(group[], text[])
{
new day, month, year, hour, minute, second;
getdate(year, month, day);
gettime(hour, minute, second);
new name_log[STRING_64];
format
(
name_log, STRING_64,
"log/%d/%02d/log_%02d.%02d.%02d.txt",
year, month, day, month, year-2000
);
new File:handle = fopen(name_log, io_append);
if (handle)
{
new str_fmt_log[MAXLEN_STR_LOG];
format
(
str_fmt_log, MAXLEN_STR_LOG, "%02d.%02d.%02d %02d:%02d:%02d <%s> %s\r\n",
day, month, year-2000, hour, minute, second, group, text
);
for (new i = 0, len = strlen(str_fmt_log); i < len; i++)
{
fputchar(handle, str_fmt_log[i], false);
}
fclose(handle);
}
else
{
printf ("Не удалось создать/открыть файл лога '%s'", name_log);
}
}
Quote:
Originally Posted by eakwarp
когда будет открытие под номером 4294967296/2+1 переменная нового открытия уйдет в минус, и все проверки на if(f) идут по бороде.
|
В последний месяц лог набивает до 2.5мб в день, 1 день ~ 30.000 записей, 2 дня ~ 60.000, ну явно не 4294967296/2+1 открытий.
Quote:
Originally Posted by eakwarp
Хороший выход - сжечь нафиг файлы раз и навсегда
|
Да вот я поспорю, что лучше забыть про файлы, и юзать что-то другое. Реальный пример - Зная мод
dimonml'а, так у него лог тоже на файлах, и набивал в лучшие времена до 50Мб (задумайтесь в эти цифры), и мод мог работать месяц без перезагрузки, это немыслимо.
Quote:
Originally Posted by DartfoL
вовсе не бред, тройка крупнейших проектов давно уже практикуют такое не просто так, а как раз из-за аналогичных аномальных багов после длительной работы сервера
|
Уже пол года спасаюсь перезагрузками. Хорошо, что хостер поддерживает возможность автоматом перезагружать сервак в указзаное мною время (делается exit и сам поднимается).
Re: Сбой чтения файлов в папке scriptfiles -
eakwarp - 04.01.2017
Quote:
Originally Posted by DartfoL
вовсе не бред, тройка крупнейших проектов давно уже практикуют такое не просто так, а как раз из-за аналогичных аномальных багов после длительной работы сервера
|
Ничего аномального.
Re: Сбой чтения файлов в папке scriptfiles -
ZiGGi - 04.01.2017
Для логов рекомендую этот плагин:
https://sampforum.blast.hk/showthread.php?tid=603175
Это лучше любого решения на Pawn.
Re: Сбой чтения файлов в папке scriptfiles -
eakwarp - 04.01.2017
Логи на файлах - зло. Этим же не возможно потом пользоваться.
Re: Сбой чтения файлов в папке scriptfiles -
ZiGGi - 04.01.2017
Quote:
Originally Posted by eakwarp
Логи на файлах - зло. Этим же не возможно потом пользоваться.
|
Само-собой, но если кому-то надо, то пусть лучше делает это с тем плагином, там хотя бы сервер каждый раз не прерывается на запись.
Re: Сбой чтения файлов в папке scriptfiles -
Diman777 - 05.01.2017
На счёт плагина посмотрим.
Щас провёл мини-тест со своим логом:
PHP Code:
for (new i; i < 1000000; i++)
{
Log("тест", "Тестирование лога i = %d", i);
}
Лог получился в 50Мб (2 минуты потребовалось), миллион строк и всё норм, после этого лог и др. файлы продолжили работу.
Вообщем надо тогда попробывать отключить серверный лог и наблюдать несколько дней, а может даже и недель)