Перезагрузить скрипт программно
-
Всем привет.
В коде есть такое место которое периодически завершается с ошибкой, таймаут при выполнении функции на встроенном языке, в блоке где эта ошибка появляется выполняется запрос к базе, видимо база не успевает ответить толи что то не понятное случается.
я пытаюсь в случае возникновении такой ошибки снова соединится с базой, но при следующей итерации скрипт опять в этом же месте падает с такой же ошибкой.Этот скрипт асинхронно чекает прокси, так что если его я перезапустить то это ни на что не повлияет.
Я думаю что если там где у меня блок db connect делать перезапуск скрипта,
то есть типа как то программно нажать скрипт стоп мгновенно, а потом скрипт Запуск
Можно это как то реализовать?
-
@gomeapat said in Перезагрузить скрипт программно:
Всем привет.
В коде есть такое место которое периодически завершается с ошибкой, таймаут при выполнении функции на встроенном языке, в блоке где эта ошибка появляется выполняется запрос к базе, видимо база не успевает ответить толи что то не понятное случается.
я пытаюсь в случае возникновении такой ошибки снова соединится с базой, но при следующей итерации скрипт опять в этом же месте падает с такой же ошибкой.Этот скрипт асинхронно чекает прокси, так что если его я перезапустить то это ни на что не повлияет.
Я думаю что если там где у меня блок db connect делать перезапуск скрипта,
то есть типа как то программно нажать скрипт стоп мгновенно, а потом скрипт Запуск
Можно это как то реализовать?Перезагрузить скрипт можно из веб интерфейса или костылями (например на bat или vbs). Надёжнее всё таки вскрыть логи и узнать причину ошибки, что бы её обработать
-
CUSTOM~LOG[.][black][493891436] [17:07:00] Поток №1 : Произошла ошибка : Таймаут во время выполнения функции на встроенном языке
CUSTOM~LOG[-][red][588737294] [17:08:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
CUSTOM~LOG[-][red][750375885] [17:09:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
CUSTOM~LOG[-][red][750375885] [17:10:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
CUSTOM~LOG[-][red][750375885] [17:11:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"Вот что пишет лог
-
@gomeapat said in Перезагрузить скрипт программно:
CUSTOM~LOG[.][black][493891436] [17:07:00] Поток №1 : Произошла ошибка : Таймаут во время выполнения функции на встроенном языке
CUSTOM~LOG[-][red][588737294] [17:08:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
CUSTOM~LOG[-][red][750375885] [17:09:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
CUSTOM~LOG[-][red][750375885] [17:10:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
CUSTOM~LOG[-][red][750375885] [17:11:00] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"Вот что пишет лог
У ноды свой лог, смотрите что содержится в файле node_log.txt.
Хотя погодите ка, у вас ошибка связанная только с таймаутом? Это означает что действие ноды было открыто слишком долго, тут сто пудова проблема в коде действия, даже в лог можно не смотреть.
-
query = "SELECT COUNT(*) as count FROM proxy WHERE real_ip IS NULL"; await global.data.query(query) .then(result =>{ [[COUNT]] = result[0][0].count }) .catch(function(err) { console.log(err.message); }); console.log('COUNT proxy without ip '+[[COUNT]]); if([[COUNT]] < 350){ query = "UPDATE proxy SET real_ip = NULL, last_update = NULL ORDER BY remix.last_update ASC LIMIT 250"; console.log(query); await global.data.execute(query) .then(result =>{ console.log('250 ip delete'); }) .catch(function(err) { console.log(err.message); } ); }
Очевидно что не выполняется этот запрос
SELECT COUNT(*) as count FROM proxy WHERE real_ip IS NUL
причем иногда работает иногда нет
-
@gomeapat said in Перезагрузить скрипт программно:
query = "SELECT COUNT(*) as count FROM proxy WHERE real_ip IS NULL"; await global.data.query(query) .then(result =>{ [[COUNT]] = result[0][0].count }) .catch(function(err) { console.log(err.message); }); console.log('COUNT proxy without ip '+[[COUNT]]); if([[COUNT]] < 350){ query = "UPDATE proxy SET real_ip = NULL, last_update = NULL ORDER BY remix.last_update ASC LIMIT 250"; console.log(query); await global.data.execute(query) .then(result =>{ console.log('250 ip delete'); }) .catch(function(err) { console.log(err.message); } ); }
Очевидно что не выполняется этот запрос
SELECT COUNT(*) as count FROM proxy WHERE real_ip IS NUL
причем иногда работает иногда нета зачем вы используете await вместе с then??
-
await использую для ожидания выполнения запроса
а в then [[COUNT]] = result[0][0].count записываю результат работы запросаЕсли я делаю не правильно напишите как Вы думаете будет правильно
-
@gomeapat, примерно так
try{ var query = "SELECT COUNT(*) as count FROM proxy WHERE real_ip IS NULL"; var result = await global.data.query(query); var count = result[0][0].count; console.log('COUNT proxy without ip ' + count); if(count < 350){ query = "UPDATE proxy SET real_ip = NULL, last_update = NULL ORDER BY remix.last_update ASC LIMIT 250"; console.log(query); result = await global.data.query(query); console.log('250 ip delete'); }; }catch(e){ console.log(e.message); };
-
@GhostZ
Написал так как Вы сказали
проработало до этого момента
[493891436] [10:26:38] Поток №1 : Произошла ошибка : Таймаут во время выполнения функции на встроенном языке
[588737294] [10:27:38] Поток №1 : Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"
у меня раньше работало примерно столько же
ну всегда по разному бывает сразу вылетает, бывает сутки двое работает.У меня на этом же сервере баз данных Версия сервера: 8.0.19 - MySQL
работает еще 10 скриптов, они конечно выполняют другие задачи, но ни один из них не падает, и сама база после этих ошибок этого скрипта тоже нормально работает.Поэтому я и думал как то перезагружать полностью именно этот скрипт.
-
Поставил действие сброс и отметил там чекбокс перезапуск процесса,
хотя в этом скрипте я браузер вообще не использую
Не помогло, скрипт проработал почти 2 дня и сейчас снова зависКак то можно ж организовать перезапуск всего скрипта
Прошу описать подробнее как это можно сделатьВ принципе в этом конкретном скрипте от BAS можно было б вообще отказаться, и переписать его на nodejs или python, но просто в BAS очень легко организовать работу с асинхронными функциями, поэтому и реализовал пока на нем.