ubuntu error code 255

214
30 ноября 2021, 12:40

У меня есть PHP скрипт который всегда весит в безконечном цикле(обработчик Телеграм бота) Когда я его запускаю в консоле на хостинге (php init.php) Он какое-то время работает коректно ,но силу не извесных мне обстаятельств через некоторое время видаёт ошибку 255 и закрывает скрипт. вот код из init.php примечание: 1.на локалке все хорошо работает. 2.Хостинг на убунту.

<?php 
require 'bot.php';
$pdo = new PDO('mysql:host='.$server_url.';dbname='.$server_db_name.'', $server_user_name, $server_password);
$bot = new  TelBot;
while (true) {
    sleep(1);
//  echo "1";
    $updates = $bot->getUpdates();
    if(is_array($updates) || is_object($updates)){
foreach ($updates->result as $update) {
    if(!empty($update)){
        $id =  $update->message->chat->id;
        $text = $update->message->text;
        echo $text;
        $comand = explode(' ', substr($text, 1))[0]; 
        $comandParrams = explode(' ', substr($text, 1))[1];
        if(trim($comandParrams) == ''){
            $comandParrams = false;
        }
        //var_dump($comandParrams);
        //echo $comand;
        switch ($comand) {
            case 'start':
            $bot-> sendMessage('Привіт, я робот магазину F5!', $id);
            $bot-> sendMessage('Ось мох команди: 1./find 100xxx - Переглянути статус ремонту (100ххх - код квитанції) 2./restore - Відновити згублену квитанцію 3./help - продивитися всі команди', $id);
                break;
            case 'help':
                $bot-> sendMessage('Ось мох команди: 1./find 100xxx - Переглянути статус ремонту (100ххх - код квитанції) 2./restore - Відновити згублену квитанцію 3./help - продивитися всі команди', $id);
                break;
            case 'find':
            $findID = $comandParrams;
            if($comandParrams == false){
                $bot->sendMessage('Не правильний формат команди', $id);
            }else{
                $res = R::getRow("SELECT `price_our` FROM `remont` WHERE `id_publick` = ".$comandParrams);
                    if(!$res){
                $bot->sendMessage('Ваш телефон не знайдено :/', $id);   
                    }else{
if($res['price_our'] == '' or $res['price_our'] == 'Null'  or $res['price_our'] == ' '){
     $bot->sendMessage('Ваш телефон в ремонті...', $id);
    }else{
        if($res['price_our'] != "не зроб" || $res['price_our'] != "не зроблено" || $res['price_our'] != "не зроб."|| $res['price_our'] != "не зроб"|| $res['price_our'] != "X"|| $res['price_our'] != "x"|| $res['price_our'] != "х"|| $res['price_our'] != "Х"){
                            $bot->sendMessage('Ваш телефон зроблено, ціна: '.$res['price_our'].'грн.', $id);
                        }else{
                            $bot->sendMessage('Ваш телефон не не зроблено', $id);
                        }
    }
                    }
                //$res['price_our']
            }
                    break;
                    case 'restore':
                            $sql = "DELETE FROM `telegram` WHERE `chat_id` = ".$id;
//echo $sql;
                $pdo->query($sql);
                $bot-> sendMessage('Ок, тоді в наступному повідомлені надішліть КОД квитанції. Приклад повідомлення: /id 100xxx', $id);
                $restore = R::dispense('telegram');
                $restore->chatId = $id;
                $restore->id_publick = '';
                $restore->surName = '';
                $restore->phoneNum = '';
                R::store($restore);
                    break;  
                    case 'id':
            $idKvit = $comandParrams;
            if($comandParrams == false){
                $bot->sendMessage('Не правильний формат команди', $id);
            }else{
$sql = "UPDATE `telegram` SET `id_publick` = '".$idKvit."' WHERE `chat_id` = ".$id;
//echo $sql;
$pdo->query($sql);
            $bot->sendMessage('Тепер напишіть ваш номер телефону який ви вказували коли здавали телефон в форматі: /num 0991234567', $id);
            $bot->sendMessage('Також  напишіть ваше прізвище в форматі /surn Крaвчук', $id);}
                    break;
                    case 'num':
    if($comandParrams == false){
                $bot->sendMessage('Не правильний формат команди', $id);
            }else{                  
            $phoneNum = $comandParrams;
            if(strlen($phoneNum) < 10){
                $bot->sendMessage('Замало цифр!', $id);
            }elseif (strlen($phoneNum) > 10) {
                $bot->sendMessage('Забагато цифр!', $id);
            }else{
                $sql = "UPDATE `telegram` SET `phone_num` = '".$phoneNum."' WHERE `chat_id` = ".$id;
//echo $sql;
$pdo->query($sql);
$res = R::getRow("SELECT * FROM `telegram` WHERE `chat_id` = ".$id);
            if($res['sur_name'] == ''){
                $bot->sendMessage('Тепер  напишіть ваше прізвище в форматі /surn Крaвчук', $id);
            }else{
                $bot->sendMessage('Щоб підтвердити налаштування напишіть /exec', $id);
            }
            }
}
                        break;
                        case 'surn':
                if($comandParrams == false){
                $bot->sendMessage('Не правильний формат команди', $id);
            }else{              
$surname = $comandParrams;
                if(strlen($surname) < 6){
            $bot->sendMessage('Замало букв!', $id);
                }else{
            $sql = "UPDATE `telegram` SET `sur_name` = '".$surname."' WHERE `chat_id` = ".$id;
            $res = R::getRow("SELECT * FROM `telegram` WHERE `chat_id` = ".$id);
            if($res['phone_num'] == ''){
                $bot->sendMessage('Тепер  напишіть ваш номер телефону який ви вказували коли здавали телефон в форматі /num 0991234567', $id);
            }else{
                $bot->sendMessage('Щоб підтвердити налаштування напишіть /exec', $id);
            }
//echo $sql;
$pdo->query($sql);
                }
}
                        break;
                        case 'exec':
$bot-> sendMessage('В обробці...', $id);
                        $res = R::getRow("SELECT * FROM `telegram` WHERE `chat_id` = ".$id);
                        if(empty($res)){
                            $bot-> sendMessage('Ви ще не ініцілювали процес створення копії квитанції. Щоб розпочати його напишіть /restore', $id);
                        }else{
                            if($res['phone_num'] == ''){
                                $bot-> sendMessage('Увведіть номер телефону в форматі: /num 0991234567', $id);
                            }else{
                                if($res['sur_name'] == ''){
                                    $bot-> sendMessage('Увведіть ваше прізвище в форматі /surn Крaвчук', $id);
                                }else{
                                    if($res['id_publick'] == ''){
                                        $bot-> sendMessage('У наступному повідомлені надішліть КОД квитанції. Приклад повідомлення: /id 100xxx', $id);  
                                    }else{
                                            $link = 'http://f5remont.beget.tech/bot/envelope.php?id='.$res['chat_id'];
                                        //$link = 'тут буде ссилка';
                                        $bot-> sendMessage($link, $id);
                                    }
                                }
                            }
                        }
                            break;
            default:
                $bot-> sendMessage('Я вас не розумію...', $id);
                break;
        }
    }
}
    }
}
?>
Answer 1

Для начала посмотрите конфигурацию, нет ли там ограничений на время исполнения консольных скриптов: max_execution_time в php.ini.

Уберите лимит:

set_time_limit(0); или

ini_set('max_execution_time', 0);

Оберните код в try catch и пойманные ошибки (при их наличии) пишите в файл, чтобы была возможность отслеживать что же пошло не так, ну и желательно сделать полновесный демон за которым бы следила система управления службами (демонами) а-ля systemd, supervisor или что там у вас. Таким образом упавший скрипт будет поднят автоматически.

READ ALSO
Обработка зависимых списков(yii2)

Обработка зависимых списков(yii2)

Суть вопроса такова, я настроил зависимые списки, но если в списке одно значение, то его невозможно выбрать (кликнуть по нему для отправки...

102
Как мне вырезать путь файла?

Как мне вырезать путь файла?

строчка в контроллере

134
Убрать категорую в url wordpress 5,без ошибки 404?

Убрать категорую в url wordpress 5,без ошибки 404?

убирал с помошью RewriteRule ^(*?/)category/(

100
Парсинг Instagram без api на php

Парсинг Instagram без api на php

Не могу получить api instagram так как данная функция не доступна для генерации tokenСейчас загружаю всю страницу file_get_contents('https://www

187