Перезагрузить скрипт программно



  • Всем привет.
    В коде есть такое место которое периодически завершается с ошибкой, таймаут при выполнении функции на встроенном языке, в блоке где эта ошибка появляется выполняется запрос к базе, видимо база не успевает ответить толи что то не понятное случается.
    Screenshot_2.jpg
    я пытаюсь в случае возникновении такой ошибки снова соединится с базой, но при следующей итерации скрипт опять в этом же месте падает с такой же ошибкой.

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


Log in to reply