/
  • ایجاد task

  • ارسال پاسخ   امتیاز موضوع:
    • 1 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی ایجاد task
    نویسنده پیام
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #1
    Question ایجاد task
    در بخش مدیریت نرم افزار mybb امکان اضافه کردن task وجود دارد، تا آنجا که من می دانم تسک ها باید بعنوان یک crontab به cronjob در لینوکس اضافه گردند تا لینوکس در زمان تعیین شده، آن اسکریپت را که در نظر گرفته ایم فراخوانی و اجرا کند.

    مشکل من اینجاست که برنامه mybb چطوری یک task اضافه می کند؟
    آیا از cronjob استفاده می کند؟
    چطور task ها را در لینوکس (؟) ذخیره می کند؟
    فایل های استفاده شده در mybb:
    و یک نمونه فایل تسک در پوشه inc/tasks:
    توسط تابع زیر هم تابع موجود در فایل task فراخوانی می شه:
    کد PHP:
    /**
     * Execute a scheduled task.
     *
     * @param int The task ID. If none specified, the next task due to be ran is executed
     * @return boolean True if successful, false on failure
     */
    function run_task($tid=0)
    {
        global 
    $db$mybb$cache$plugins$task$lang;

        
    // Run a specific task
        
    if($tid 0)
        {
            
    $query $db->simple_select("tasks""*""tid='{$tid}'");
            
    $task $db->fetch_array($query);
        }

        
    // Run the next task due to be run
        
    else
        {
            
    $query $db->simple_select("tasks""*""enabled=1 AND nextrun<='".TIME_NOW."'", array("order_by" => "nextrun""order_dir" => "asc""limit" => 1));
            
    $task $db->fetch_array($query);
        }

        
    // No task? Return
        
    if(!$task['tid'])
        {
            
    $cache->update_tasks();
            return 
    false;
        }

        
    // Is this task still running and locked less than 5 minutes ago? Well don't run it now - clearly it isn't broken!
        
    if($task['locked'] != && $task['locked'] > TIME_NOW-300)
        {
            
    $cache->update_tasks();
            return 
    false;
        }
        
    // Lock it! It' mine, all mine!
        
    else
        {
            
    $db->update_query("tasks", array("locked" => TIME_NOW), "tid='{$task['tid']}'");
        }

        
    // The task file does not exist
        
    if(!file_exists(MYBB_ROOT."inc/tasks/{$task['file']}.php"))
        {
            if(
    $task['logging'] == 1)
            {
                
    add_task_log($task$lang->missing_task);
            }
            
    $cache->update_tasks();
            return 
    false;
        }
        
    // Run the task
        
    else
        {
            
    // Update the nextrun time now, so if the task causes a fatal error, it doesn't get stuck first in the queue
            
    $nextrun fetch_next_run($task);
            
    $db->update_query("tasks", array("nextrun" => $nextrun), "tid='{$task['tid']}'");
            
            include_once 
    MYBB_ROOT."inc/tasks/{$task['file']}.php";
            
    $function "task_{$task['file']}";
            if(
    function_exists($function))
            {
                
    $function($task);
            }
        }

        
    $updated_task = array(
            
    "lastrun" => TIME_NOW,
            
    "locked" => 0
        
    );
        
    $db->update_query("tasks"$updated_task"tid='{$task['tid']}'");

        
    $cache->update_tasks();

        return 
    true;



    فایل‌(های) پیوست شده
    .php  tasks.php (اندازه: 24.84 KB / تعداد دفعات دریافت: 2)
    .php  functions_task.php (اندازه: 8.78 KB / تعداد دفعات دریافت: 3)
    .php  backupdb.php (اندازه: 2.88 KB / تعداد دفعات دریافت: 2)
    (آخرین ویرایش در این ارسال: ۱۳۸۸ اسفند ۲ ۰۶:۰۰ صبح، توسط nasserghiasi.)
    ۱۳۸۸ اسفند ۲ ۰۵:۳۳ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #2
    RE: ایجاد task
    یکی از دوستان گفتند که ممکنه Mybb هنگام اجرای یک درخواست از طرف بازدیدکننده کلاس task رو اجرا می کنه و task هارو انجام می ده! اما این روش منطقی نیست، چون مثلا در پوشه تسک فایلی به نام massmail.php هست که برای ارسال ایمیل انبوه از طریق حلقه استفاده می کنه و ممکنه تعداد کاربران زیاد باشه و درخواست کاربر چند دقیقه طول بکشه و یا اصلا ممکنه هیچ کاربری در آن زمان مشخص از سایت بازدید نکنه ( مثلا ساعت 5 صبح : همه که مثل من نیستند شب کار باشن Big Grin)
    ۱۳۸۸ اسفند ۲ ۰۹:۳۳ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #3
    RE: ایجاد task
    http://wiki.mybboard.net/index.php/Help:Task_System
    ۱۳۸۸ اسفند ۲ ۰۹:۴۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : nasserghiasi
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #4
    RE: ایجاد task
    به نظر شما فایل task.php هر 1دقیقه یکبار فراخوانی شود؟
    ۱۳۸۸ اسفند ۲ ۱۰:۴۸ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS