1.9 তে শেল এবং পিএইচপি ক্রোন ফাইলগুলির মধ্যে পার্থক্য


16

শিরোনাম অনেক সুন্দর এটি অঙ্ক আপ। ম্যাজেন্টো ক্রনের জন্য শেল ফাইল এবং পিএইচপি ফাইলের মধ্যে পার্থক্য রয়েছে কি?

পার্থক্য থাকলে অন্যটির পরিবর্তে একটি চালানোর কারণ আছে?


আপনি ক্রোন.শ ব্যবহার করুন, এটি কল করার আগে কোনও ক্রোন.এফপি প্রক্রিয়া চলছে কিনা তা পরীক্ষা করে দেখবে।
তাই খ্রিস্টান

উত্তর:


7

Cron.sh ক্রোন.এফপি ফাইলের দিকে নির্দেশ করছে, সুতরাং আপনার ক্রোনজব টাস্কটি .sh ফাইলের দিকে নির্দেশ করা উচিত।

মূলত পিএইচপি ফাইলের ভিতরে ম্যাগন্টো থেকে চাকরি পুনরুদ্ধার করতে ক্রোনের সমস্ত যুক্তি রয়েছে এবং sh ফাইলটি পিএইচপি ফাইলটি আহ্বান করে।


4
cron.shফাইল সেখানে ক্রন প্রক্রিয়া Magento চলমান একটি নতুন এক শুরু করার আগে নয় যে পরীক্ষা করার জন্য সেট আপ করা হয়। এটি সর্বদা ট্রিগার হিসাবে ব্যবহার করুন। ডাব্লুএইচএম / সিপ্যানেলের সাথে নির্দিষ্ট সুরক্ষা স্কিমের অধীনে আপনাকে শেল স্ক্রিপ্টগুলি ক্রোন জব হিসাবে চালানোর অনুমতি দেওয়া হতে পারে এবং কেবল তখনই আপনি সরাসরি cron.phpক্রন্টব্যাট থেকে চালিত হন।
ফায়াসকো ল্যাবগুলি

@ ফিয়াসকো ল্যাবগুলিতে যুক্ত করতে আপনি ডাব্লুএইচএম shell_exec/ সিপ্যানেলে অক্ষম করে থাকতে পারেন , তবে এর অর্থ এই নয় যে এটি cron.phpচেক করা অবস্থায় অক্ষম হিসাবে প্রতিবেদন করা হয়েছে ini_get('disable_functions')। সুতরাং ক্রোন চালানোর চেষ্টা করে, অক্ষম নয়shell_exec হিসাবে দেখে , এটি ব্যবহারের চেষ্টা করে এবং ব্যর্থ হয় কারণ এটি অক্ষম। অসহায়তা
pspahn

7

আপনার ব্যবহার করা উচিত cron.sh, যেমন

* * * * * /bin/sh /var/www/html/magento/cron.sh

আপনার পরিবেশের উপর নির্ভর করে cron.shরান cron.phpচলে cron.shযা চালায় cron.php। এটি ম্যাজেন্টোর ক্রোনকে একাধিকবার কাজ সম্পাদন করা থেকে বিরত রাখতে বা অনেকগুলি প্রক্রিয়া ওভারল্যাপ করা থেকে রক্ষা করার জন্য ডিজাইন করা হয়েছে।


প্রথমবার এটি চালানো হলে, cron.shচলমান চলমান প্রক্রিয়াগুলি cron.phpইতিমধ্যে চলছে কিনা তা পরীক্ষা করে দেখবে (কোনও যুক্তি ছাড়াই)। যদি তা না হয় তবে তা কার্যকর হবে

/usr/bin/php /var/www/html/magento/cron.php &

উপর cron.phpগুলি প্রথমবার চালনার (এবং যদি আপনার অপারেটিং সিস্টেম / হোস্ট এটি সমর্থন নির্ভর করে) এটি ডিম হবে cron.sh আবার , দুইবার, কিন্তু এই সময় আর্গুমেন্ট ক্ষণস্থায়ী:

/bin/sh /var/www/html/magento/cron.sh cron.php -mdefault 1 > /dev/null 2>&1 &
/bin/sh /var/www/html/magento/cron.sh cron.php -malways 1 > /dev/null 2>&1 &

cron.shদ্বিতীয়বার ফিরে আসুন , এটি নির্দিষ্ট প্যারামগুলির সাথে ক্রোন চলছে কিনা তা আবার পরীক্ষা করবে। যদি তা না হয় তবে তা এটিকে আবার বা এটিকে cron.phpদিয়ে দেবে ।defaultalways

/usr/bin/php /var/www/html/magento/cron.php -mdefault &
/usr/bin/php /var/www/html/magento/cron.php -malways &

এবং cron.phpশেষ বারের জন্য, এটি ম্যাজেন্টোকে defaultক্রোন জবগুলি চালিত করতে উত্সাহিত করবে (প্রায় সবগুলিই), পাশাপাশি alwaysক্রোন জবগুলি (যেমন enterprise_refresh_index)। এগুলিকে দুটি প্রক্রিয়াতে পৃথক করে এটি অন্যদের ব্লক করা থেকে দীর্ঘকালীন চাকরীর ঝুঁকি হ্রাস করে।


4

cron.sh

/bin/shএই স্ক্রিপ্টটি প্রক্রিয়া করতে ব্যবহার করুন

#!/bin/sh

CRONSCRIPTকল করার জন্য ফাইলের সাথে একটি ধ্রুবক সেট করুন। Argument 1 হ'ল প্রথম যুক্তি likecron.sh /whatever/path/cron.php

# location of the php binary
if [ ! "$1" = "" ] ; then
    CRONSCRIPT=$1
else
    CRONSCRIPT=cron.php
fi

অন্য ধ্রুবক সেট করুন, এখানে আপনি স্পষ্টভাবে পাস alwaysবা করতে পারেন default

MODE=""
if [ ! "$2" = "" ] ; then
    MODE=" $2"
fi

ক্রনের কোনও পরিবেশের ভেরিয়েবল নেই, সুতরাং আপনি কেবল কল করতে পারবেন না phpwhichআপনাকে বলে যে পিএইচপি বাইনারি কোথায় বাস করছে, সম্ভবত এটি/bin/php

PHP_BIN=`which php`

$0ফাইলটি __FILE__পিএইচপি-র মতোই

# absolute path to magento installation
INSTALLDIR=`echo $0 | sed 's/cron\.sh//g'`

এটি ঠিক কীভাবে কাজ করে তা নিশ্চিত নয় তবে এটি কী করে: কল cron.phpদিয়ে php

#   prepend the intallation path if not given an absolute path
if [ "$INSTALLDIR" != "" -a "`expr index $CRONSCRIPT /`" != "1" ];then
    if ! ps auxwww | grep "$INSTALLDIR$CRONSCRIPT$MODE" | grep -v grep 1>/dev/null 2>/dev/null ; then
        $PHP_BIN $INSTALLDIR$CRONSCRIPT$MODE &
    fi
else
    if  ! ps auxwww | grep "$CRONSCRIPT$MODE" | grep -v grep | grep -v cron.sh 1>/dev/null 2>/dev/null ; then
        $PHP_BIN $CRONSCRIPT$MODE &
    fi
fi

cron.php

যেমনটি ইতিমধ্যে বলা হয়েছে, ক্রনের একটি কার্যনির্বাহী ডির বা অন্য কোনও পরিবেশের পরিবর্তনশীল নেই, তাই কার্যকারী দির সেট করা আছে।

// Change current directory to the directory of current script
chdir(dirname(__FILE__));

require 'app/Mage.php';

if (!Mage::isInstalled()) {
    echo "Application is not installed yet, please complete install wizard first.";
    exit;
}

আপনি যদি কার্ল বা কিছু দ্বারা ক্রোন.এফপি কল করেন তবে ফাইলের নামগুলি স্থির?

// Only for urls
// Don't remove this
$_SERVER['SCRIPT_NAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_FILENAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_FILENAME']);

Mage::app('admin')->setUseSessionInUrl(false);

উমাস্ক সেট করুন, যা নতুন ফাইলগুলি তৈরি করার অনুমতিগুলি দিয়ে এটি নির্ধারণ করে - শূন্য অনুমতি, কাউকে কিছু করার অনুমতি দেওয়া হয় না।

umask(0);

নিশ্চিত করুন, যা প্রয়োজন সমস্ত ফাংশন অনুমোদিত।

$disabledFuncs = explode(',', ini_get('disable_functions'));
$isShellDisabled = is_array($disabledFuncs) ? in_array('shell_exec', $disabledFuncs) : true;
$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

সেট $cronmode

try {
    if (stripos(PHP_OS, 'win') === false) {
        $options = getopt('m::');
        if (isset($options['m'])) {
            if ($options['m'] == 'always') {
                $cronMode = 'always';
            } elseif ($options['m'] == 'default') {
                $cronMode = 'default';
            } else {
                Mage::throwException('Unrecognized cron mode was defined');
            }
        } else if (!$isShellDisabled) {

যদি ক্রোনমোড সেট না করা থাকে, আমরা cron.shউভয় মোডের সাথে কল করি

            $fileName = basename(__FILE__);
            $baseDir = dirname(__FILE__);
            shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
            shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
            exit;
        }
    }

এবং তারপরে ম্যাজেন্টো শেষ পর্যন্ত এর কাজটি করছে:

  • ইভেন্ট পর্যবেক্ষকগুলি লোড করুন এবং তাদের পর্যবেক্ষক পুলে যুক্ত করুন

    Mage::getConfig()->init()->loadEventObservers('crontab');
    Mage::app()->addEventArea('crontab');

যদি shell_execঅক্ষম থাকে, ইভেন্টগুলি প্রেরণ করুন, \Aoe_Scheduler_Model_Observer::dispatchAlwaysএবং \Mage_Cron_Model_Observer::dispatchক্রোন কার্যগুলি চালাচ্ছেন।

    if ($isShellDisabled) {
        Mage::dispatchEvent('always');
        Mage::dispatchEvent('default');
    } else {
        Mage::dispatchEvent($cronMode);
    }
} catch (Exception $e) {
    Mage::printException($e);
    exit(1);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.