За последние 24 часа нас посетили 20372 программиста и 1013 роботов. Сейчас ищут 355 программистов ...

Планировщик задач. Срочно пж!

Тема в разделе "PHP для новичков", создана пользователем テムルマル AI, 17 июн 2022.

  1. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    Здравствуйте. Мне нужно чтобы через определённый промежуток времени выполнялось какая то функция, нужно чтобы оно не было привязано ОС, а просто всё делалось через PHP код. Пожалуйста мне это нужно сделать по быстрее.
     
  2. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Я бы пробовал в переменную ($time) записывать текущее время, и через какое нибудь условие (допустим когда минуты равны 10 или 20 или 30 и т.д.), запускал бы функцию. Ну и что бы без обновления страницы, при помощи Ajax jQuery присваивал новые значения времени в переменную. Как то так...
     
  3. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    Я это делаю для телеграмм бота, мне нужно чтобы было без AJAX, просто чтоб функция или хотя бы php файл запускался автоматически через определённое время.
    ПЖ Мне это срочно нужно!
     
  4. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Без Ajax не получится. Интерпретатор один раз прочитает скрипт php и всё...
     
  5. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
  6. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Эта библиотека похоже Cron использует. А это значит привязка к ОС будет...А для телеграмма нельзя использовать AJAX?
     
  7. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    просто я на виртуальном хостинге, просто не хотелось работать с OS, а можно это встроить как то.
    --- Добавлено ---
    даже если взаимодействовать с ОС
     
  8. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Так проблем же быть не должно с AJAX на хостинге...
     
    テムルマル AI нравится это.
  9. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    просто надо автоматизировать, чтобы например админ каждую неделю не запускал код :/
    --- Добавлено ---
    у меня дедлайн 1 день осталось 4ч до сдачи :( должен успеть
    --- Добавлено ---
    например хотя бы чтоб выполнялось команда в терминале через это можно прикрутить "php run.php" команду, хотябы....
     
  10. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Могу посоветовать с AJAX:
    Делайте два файла index.php и time.php

    Содержание index.php:
    Код (Text):
    1. <html>
    2.    <head>        
    3.     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>          
    4.     </head>
    5.  
    6. <body>
    7.    
    8.     <div id="content"></div>
    9.    
    10.     <script>
    11.         function show()
    12.         {
    13.             $.ajax({
    14.                 url: "time.php",
    15.                 cache: false,
    16.                 success: function(html){
    17.                     $("#content").html(html);
    18.                 }
    19.             });
    20.         }
    21.    
    22.         $(document).ready(function(){
    23.             show();
    24.             setInterval('show()',1000);
    25.         });
    26.     </script>
    27.    
    28. </body>
    29. </html>
    Содержание time.php:
    Код (Text):
    1. <?php
    2.  
    3. $time = date("s");
    4.  
    5. if($time%2 == 0) {
    6. echo 'Четная цифра';
    7. }
    8. else {
    9. echo 'Не четная цифра';
    10. }
    Запускаете index.php и у Вас будут надписи чередоваться, по этому примеру можно реализовать Вашу задачу...
     
    テムルマル AI нравится это.
  11. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
     
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    хостинги позволяю крон обычно
     
  13. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    а как можно это реализовать на SSH?
     
  14. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    В файле time.php написать условие:
    Код (Text):
    1. $time = date("l");
    2.  
    3. if($time == Monday) {
    4. # Выполнять действие
    5. }
    6. else {
    7. # Не выполнять действие
    8. }
     
    テムルマル AI нравится это.
  15. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    гугишь - как добавить задачу Cron в linux - делаешь, радуешься
     
  16. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    щас попробую
     
  17. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    ну чего ерунду советовать ... это ни грамма ни планировщик... и не по расписанию.
    + флаги всякие.... иначе при каждом запуске в понедельник будет что-то выполнятся, а не один раз
    Это надо отдельный комп - на нем бразуер, запустить, и чтоб через аякс это дергалось..?? да нахера такой костыль.. лучше разобраться за 5 минут с планировщиком, настроить его
     
    テムルマル AI нравится это.
  18. テムルマル AI

    テムルマル AI Новичок

    С нами с:
    10 май 2022
    Сообщения:
    28
    Симпатии:
    1
    всё спасибо разобрался с Cron обоим вам спасибо :)
     
    artoodetoo нравится это.
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    @Reken Оригинальный ты чел... AJAX требует браузера, он сам по себе не выполняется :) Тут или крон, как в результате и было сделано, либо демона писать. Крон - проще
     
    Temurumaru нравится это.
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    ... или подойти к задаче не так абстрактно, а проанализировать зачем нужно это действие. возможно хватит проверки при каждом новом запросе к боту типа
    Код (Text):
    1.  
    2. если (последний раз это действие выполнялось > 10 минут назад)
    3. то { выполнить действие; записать время }
     
    mkramer нравится это.
  21. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    если запроса ждать нельзя, то как ни крути, нужен cron.
    там написано что это расписание, которое ты помещаешь в крон. но только в кроне будет одна строчка. а вся логика расписания будет в программе.
    кто знает ларавель, может заметить что это аналог Laravel Schedule. только реализовано как независимый компонент.

    в общем, либо переосмысление задачи, либо крон.
     
  22. johovich

    johovich Активный пользователь

    С нами с:
    24 авг 2016
    Сообщения:
    146
    Симпатии:
    17
    На виртуальном хостинге кажется тоже бывает доступен cron. Если без cron, то это какие-то жуткие костыли, чтобы заменить cron. Теоретически можно запустить нужный процесс php в бесконечном цикле из командной строки через ssh, чтобы сессия сохранялась при отключении из консоли, надо запустить ее через screen.
    Система такая:
    cron.php
    PHP:
    1. <?php
    2. $flag = 0;
    3. while(true){
    4.         sleep(5);
    5.         print "tik time:" . time()  . PHP_EOL;
    6.         $min = intdiv(time(), 60); //time since unix epoch in min
    7.         print "mins: $min" . PHP_EOL;
    8.         if($flag != $min && $min % 2 == 0){ //код запускается каждые 2 минуты, меняешь двойку на нужное число
    9.                 $flag = $min;
    10.                 print "doit" . PHP_EOL;
    11. //тут твой вызывающий нужный скрипт код
    12.         }
    13. }
    --- Добавлено ---

    upload_2022-7-1_15-36-16.png
     
    テムルマル AI нравится это.
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Такой процесс называется демоном.