สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
eange08
PHP VIP Members
PHP VIP Members
Posts: 6287
Joined: 22/12/2020 10:09 am

สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by eange08 »

ทำ cron ให้รันข้อมูลแต่ว่าไม่ทำงานในส่วนของ run เว้นแต่ว่าจะเรียกอยู่ใน is_runnable ถึงจะทำงานต้องทำอย่างไรบ้างค่ะ
และตอนนี้อยู่ใน Not ready tasks หมายความว่ามันจะไม่ทำงานหรือเปล่าค่ะ (ใช้ Cron status เช็คสถานะค่ะ)
Selection_999(176).png
Selection_999(176).png (88.56 KiB) Viewed 135 times
code ในส่วนของ cron

Code: Select all

<?php

namespace mindphp\m_trending\cron;

/**
 * @ignore
 */
class trending_data extends \phpbb\cron\task\base {

    protected $user;
    protected $config;
    protected $config_text;
    protected $db;
    protected $log;
    protected $phpbb_root_path;
    protected $php_ext;

    public function __construct(\phpbb\user $user, \phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\db\driver\driver_interface $db, \phpbb\log\log $log, $table_prefix, $phpbb_root_path, $php_ext) {
        $this->user = $user;
        $this->config = $config;
        $this->config_text = $config_text;
        $this->db = $db;
        $this->log = $log;
        $this->table_prefix = $table_prefix;
        $this->phpbb_root_path = $phpbb_root_path;
        $this->php_ext = $php_ext;
    }

    public function run() { //ไม่ทำงาน ต่อให้กด run ก็ไม่ทำงานค่ะ
        $this->user->add_lang_ext('mindphp/m_trending', 'acp/info_acp_m_trending');
        $this->get_trending_topic();

        global $phpbb_log;
        date_default_timezone_set($this->config['board_timezone']);
        $this->config->set('time_trending_data_last_gc',time(),TRUE);
        $this->log->add('admin', 2, '127.0.0.1', 'sample.run');

        
    }

    public function is_runnable() { //ทำงานได้
        $this->log->add('admin', 2, '127.0.0.1', 'sample.is_runnable');
        return (bool) $this->config['m_trending_alert'];
    }

    function should_run() { //ทำงานได้

        $this->log->add('admin', 2, '127.0.0.1', 'sample.should_run');
        date_default_timezone_set($this->config['board_timezone']);
         return $this->config['time_trending_data_last_gc'] < time() - $this->config['time_trending_data_gc'];
//        return TRUE;
    }

    public function get_trending_topic() { //ไม่ทำงาน
      
               
         $this->log->add('admin', 2, '127.0.0.1', 'Sucess Trending', time());
    }

    

}
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 33866
Joined: 22/09/2008 6:18 pm
Contact:

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by mindphp »

กำหนดเวลาไม่ต้อง settime zone เข้าไปครับ ถ้า set เพิ่มจะทำให้เวลากลางเพี้ยน ลองดูตัวอย่างจาก cron ตัวอื่นประกอบ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
eange08
PHP VIP Members
PHP VIP Members
Posts: 6287
Joined: 22/12/2020 10:09 am

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by eange08 »

เอา date_default_timezone_set ออกแล้วนะคะ ลองทำตัวอย่างจาก https://github.com/gRegorLove/phpbb-ext ... sample.php

แต่รันอัตโนมัติแค่รอบแรกรอบเดียว หรือต้องกด run ถึงจะทำต่อให้นะคะ กำลังทดสอบเรื่องเวลาอยู่นะคะ

Code: Select all

<?php
/**
 *
 * MAPP Example. An extension for the phpBB Forum Software package.
 *
 * @copyright (c) 2020, Gregor Morrill, https://stevens-stevens.com
 * @license GNU General Public License, version 2 (GPL-2.0)
 *
 */

namespace mindphp\m_trending\cron\task;


class time_trending_data extends \phpbb\cron\task\base
{
	/**
	 * How often we run the cron (in seconds).
	 * @var int
	 */
	protected $cron_frequency = 240;

	/** @var \phpbb\config\config */
	protected $config;

	/** @var \phpbb\log\log */
	protected $log;

	/**
	 * Constructor
	 *
	 * @param \phpbb\config\config $config Config object
	 */
                 public function __construct(\phpbb\user $user, \phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\db\driver\driver_interface $db, \phpbb\log\log $log, $table_prefix, $phpbb_root_path, $php_ext) {
                    $this->user = $user;
                    $this->config = $config;
                    $this->config_text = $config_text;
                    $this->db = $db;
                    $this->log = $log;
                    $this->table_prefix = $table_prefix;
                    $this->phpbb_root_path = $phpbb_root_path;
                    $this->php_ext = $php_ext;
                    $this->log->add('admin', 2, '127.0.0.1', 'sample3.construct time_trending_data1');
                }

	/**
	 * Runs this cron task.
	 *
	 * @return void
	 */
	public function run()
	{
		$this->log->add('admin', 2, '127.0.0.1', 'sample3.run ');
		// Run your cron actions here...

		// Update the cron task run time here if it hasn't
		// already been done by your cron actions.
		//$this->config->set('example_cron_last_run', time(), true);
                            $this->config->set('time_trending_data_last_gc',time(),TRUE);
	}

	/**
	 * Returns whether this cron task can run, given current board configuration.
	 *
	 * For example, a cron task that prunes forums can only run when
	 * forum pruning is enabled.
	 *
	 * @return bool
	 */
	public function is_runnable()
	{
		$this->log->add('admin', 2, '127.0.0.1', 'sample3.is_runnable time_trending_data');
		return true;
	}

	/**
	 * Returns whether this cron task should run now, because enough time
	 * has passed since it was last run.
	 *
	 * @return bool
	 */
	public function should_run()
	{
		$this->log->add('admin', 2, '127.0.0.1', 'sample3.should_run time_trending_data');
		return $this->config['time_trending_data_last_gc'] < (time() - $this->cron_frequency);
	}
}
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 33866
Joined: 22/09/2008 6:18 pm
Contact:

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by mindphp »

อีกที่ should_run ยังไม่ได้บอก
frequency

ตามตัวอย่างเขาจะกำหนดไว้ที่
protected $cron_frequency = 60;
ถ้ารับค่ามา logs ดูก่อน 60 หมายถึงให้รันทุก 60 วินาที
ถ้าของเราจะกำหนด วันละครั้ง คือ 24×60×60
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
eange08
PHP VIP Members
PHP VIP Members
Posts: 6287
Joined: 22/12/2020 10:09 am

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by eange08 »

ไม่รันให้อัตโนมัติเมื่อถึงเวลา ต้องกด run เองถึงจะทำงานอยู่ค่ะ
Selection_999(177).png
Selection_999(177).png (90.31 KiB) Viewed 126 times
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 33866
Joined: 22/09/2008 6:18 pm
Contact:

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by mindphp »

ลองเครียร์ออกไปก่อน แล้วตั้งเริ่มต้นปรับเป็น สัก 120s
(ทุกๆ สองนาที)
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
eange08
PHP VIP Members
PHP VIP Members
Posts: 6287
Joined: 22/12/2020 10:09 am

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by eange08 »

ลองปิด - เปิด extension ใหม่ และปรับให้รัน 120 วิ ก็ยังไม่รันให้นะคะ ต้องกด run ถึงจะทำงานค่ะ
รอบเวลา 11:59 น.
Selection_999(178).png
Selection_999(178).png (112.11 KiB) Viewed 121 times
log ที่เก็บไม่เข้า run เลยนะคะ
Selection_999(179).png
Selection_999(179).png (30.88 KiB) Viewed 121 times
code ล่าสุดค่ะ

Code: Select all

<?php
/**
 *
 * MAPP Example. An extension for the phpBB Forum Software package.
 *
 * @copyright (c) 2020, Gregor Morrill, https://stevens-stevens.com
 * @license GNU General Public License, version 2 (GPL-2.0)
 *
 */

namespace mindphp\m_trending\cron\task;


class time_trending_data extends \phpbb\cron\task\base
{
	/**
	 * How often we run the cron (in seconds).
	 * @var int
	 */
	protected $cron_frequency = 120;

	/** @var \phpbb\config\config */
	protected $config;

	/** @var \phpbb\log\log */
	protected $log;

	/**
	 * Constructor
	 *
	 * @param \phpbb\config\config $config Config object
	 */
//	public function __construct(\phpbb\config\config $config, \phpbb\log\log $log)
//	{
//		$this->config = $config;
//		$this->log = $log;
//		$this->log->add('admin', 2, '127.0.0.1', 'sample3.construct time_trending_data');
//	}
                 public function __construct(\phpbb\user $user, \phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\db\driver\driver_interface $db, \phpbb\log\log $log, $table_prefix, $phpbb_root_path, $php_ext) {
                    $this->user = $user;
                    $this->config = $config;
                    $this->config_text = $config_text;
                    $this->db = $db;
                    $this->log = $log;
                    $this->table_prefix = $table_prefix;
                    $this->phpbb_root_path = $phpbb_root_path;
                    $this->php_ext = $php_ext;
                  // $this->log->add('admin', 2, '127.0.0.1', 'sample3.construct');
                }

	/**
	 * Runs this cron task.
	 *
	 * @return void
	 */
	public function run()
	{
		$this->log->add('admin', 2, '127.0.0.1', 'run>>>> ');
		// Run your cron actions here...

		// Update the cron task run time here if it hasn't
		// already been done by your cron actions.
		//$this->config->set('example_cron_last_run', time(), true);
                            $this->config->set('time_trending_data_last_gc',time(),true);
	}

	/**
	 * Returns whether this cron task can run, given current board configuration.
	 *
	 * For example, a cron task that prunes forums can only run when
	 * forum pruning is enabled.
	 *
	 * @return bool
	 */
	public function is_runnable()
	{
		$this->log->add('admin', 2, '127.0.0.1', 'is_runnable');
		return true;
	}

	/**
	 * Returns whether this cron task should run now, because enough time
	 * has passed since it was last run.
	 *
	 * @return bool
	 */
	public function should_run()
	{               //echo $this->config['example_cron_last_run'];
       //echo  date("d-m-Y H:i:s", $this->config['example_cron_last_run']);
		$this->log->add('admin', 2, '127.0.0.1', 'should_run ');
		return $this->config['time_trending_data_last_gc'] < (time() - $this->cron_frequency);
//                            return $this->config['time_trending_data_last_gc'] < (time() - $this->config['time_trending_data_gc']);
	}
}
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 33866
Joined: 22/09/2008 6:18 pm
Contact:

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by mindphp »

ค่าที่ควร Logs เก็บไว้ คือ
$this->config['time_trending_data_last_gc']
time()
$this->cron_frequency

เช็ค unix timestamp
https://www.thainaturecure.com/timer_ti ... switch.php
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
eange08
PHP VIP Members
PHP VIP Members
Posts: 6287
Joined: 22/12/2020 10:09 am

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by eange08 »

เช็คเวลาจากที่เก็บ log มาส่วน should_run ได้เอามาเช็คกับเว็บแล้วนะคะ แต่เวลาที่ได้ต่างกัน cron เลยไม่ทำงานใช่หรือเปล่าค่ะ
code

Code: Select all

public function is_runnable()
	{               $this->config->set('time_trending_data_last_gc', time(), true); //ส่วนบันทึกเวลาที่รันไว้ตรงนี้เพื่อเช็คการเปลี่ยนเวลาทำงาน
		$this->log->add('admin', 2, '127.0.0.1', 'is_runnable');
		return true;
	}
	
public function should_run()
	{       
		$this->log->add('admin', 2, '127.0.0.1', 'should_run '.$this->config['time_trending_data_last_gc'].'--'.time().'--'.$this->cron_frequency);

                return $this->config['time_trending_data_last_gc'] < (time() - $this->cron_frequency);
//                return true;
	}
ใน log

Code: Select all

admin	127.0.0.1	02 ส.ค. 2022 13:48	{Should run 1659422930--1659422930--120}
ส่วนหน้าเว็บ กด convert to a date ได้วันเวลาเป็น 2022-08-02 06:36:31
Selection_999(181).png
Selection_999(181).png (27.77 KiB) Viewed 93 times
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 33866
Joined: 22/09/2008 6:18 pm
Contact:

Re: สอบถามการทำ cron ให้รันตามเวลาที่กำหนด

Post by mindphp »

1659422930-1659422930 ===> ได้ 0
และถูก ลบไปอีก 120 เวลาติดลบจริง แต่เป็นเวลาที่เกิดขึ้นไปแล้ว
เช็คว่าตอน set ให้ทำงานในรอบถัดไป ว่ารับค่าเวลาเข้ามาถูกต้องหรือเปล่า ตอนเรียกใช้และตอน set ค่าต้องใช้เวลาของ time zone เดียวกัน
ลองดูค่า unix timestamp ของ cron ตัวอื่นที่รอทำงาน เปลี่ยนเทียบเวลากันดูครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - PHP”

Who is online

Users browsing this forum: chakrit, eange08 and 29 guests