@gurkin4 said in Как сделать "вечный скрипт"?:
@UserTrue Вечный? Даже комп имеет свой срок жизни!
По неделе! Ха, я уже около года кручу, перегружал только для обновления ОС, но это далеко не вечность!
Понятно , опять ценные 5 копеек
Всем привет.
В коде есть такое место которое периодически завершается с ошибкой, таймаут при выполнении функции на встроенном языке, в блоке где эта ошибка появляется выполняется запрос к базе, видимо база не успевает ответить толи что то не понятное случается.

я пытаюсь в случае возникновении такой ошибки снова соединится с базой, но при следующей итерации скрипт опять в этом же месте падает с такой же ошибкой.
Этот скрипт асинхронно чекает прокси, так что если его я перезапустить то это ни на что не повлияет.
Я думаю что если там где у меня блок 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??
@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 очень легко организовать работу с асинхронными функциями, поэтому и реализовал пока на нем.