আমি কীভাবে সেশন ফাইলগুলি হ্যান্ডেল করব যা খুব বেশি হয়ে যায়?


43

আমি বেশ কয়েকটি সার্ভারের সিসাদমিন হিসাবে অভিনয় করছি যা ম্যাজেন্টো সাইটগুলিকে ধারণ করে এবং মাঝে মধ্যে তারা সেশন ফাইলগুলি পূরণ করে।

আমাকে বলা হয়েছে যে এই ফাইলগুলি পরিচালনা করা ম্যাজেন্টোর মধ্যে থেকে কিছু করা যায় না এবং আমি মনে করি তাদের অস্থায়ী ব্যবহারের অর্থ তারা কেবল বন্ধ করা যাবে না, তবে এটি অদ্ভুত বলে মনে হচ্ছে যে এইগুলি অপসারণ পরিচালনা করার জন্য ম্যাজেন্টোর কোনও উপায় নেই নথি পত্র?

আমার সমাধানটি একটি রাত্রে ক্রন্টব যা এ জাতীয় কিছু সম্পাদন করে find /path/to/magento/sessions/ -name "sess*" -type f -deleteতবে এটি কমপক্ষে বলতে অপ্রয়োজনীয় বোধ করে।

এগুলি হ্যান্ডেল করার সর্বোত্তম উপায় কী?

উত্তর:


37

findঅন্যদের দ্বারা উল্লিখিত হিসাবে একটি কাস্টম সংশোধন সময় ব্যবহার করে সেশন ফাইলগুলি মুছে ফেলা ছাড়াও আপনি এটি করতে পারেন:

  • আপনার ডাটাবেসে সেশনগুলি সংরক্ষণ করুন । অবশ্যই এটি আপনার ডাটাবেসে বোঝা চাপিয়ে দেবে এবং এটি দ্রুততম উপায় নয়, তবে আপনি সেভাবে আরও বেশি সেশন পরিচালনা করতে পারবেন এবং আপনি একাধিক ফ্রন্টএন্ড সার্ভারের মধ্যে সেশনগুলি ভাগ করতে পারবেন। আপনি app/etc/local.xmlস্যুইচ করে সেটিংস পরিবর্তন করতে পারেন

    <session_save><![CDATA[files]]></session_save>

    প্রতি

    <session_save><![CDATA[db]]></session_save>
  • আপনার সেশন স্টোরেজ হিসাবে ম্যাকচেড ব্যবহার করুন । ম্যাজেন্টোও এটি ডিফল্টরূপে সমর্থন করে। কটাক্ষপাত আছে app/etc/local.xml.additionalকনফিগারেশনের জন্য। আমি এটি কখনও প্রযোজনায় ব্যবহার করি নি তবে শুনেছি এটি কিছুটা জটিল।

  • হ্যান্ডেল Redis মধ্যে সেশন কলিন Mollenhours উজ্জ্বল এক্সটেনশান ব্যবহার করে Cm_RedisSession । রেডিস সেট আপ করতে খুব বেশি সময় নেওয়া উচিত নয়, এটি ক্যাচিংয়ের জন্যও ব্যবহার করা যেতে পারে (দেখুন সিএম_ক্যাচি_ব্যাকেন্ড_ডেডিস ) এবং ডিস্কের উপর অধ্যবসায়ের সাথে একটি র‌্যাম ক্যাশে সংযুক্ত করে ( মেমক্যাচড , র‌্যাম ডিস্ক বা এর মতো) যা আপনার সার্ভারের ক্ষেত্রে সর্বদা থাকে which বিপর্যয়।


1
ডাটাবেসে সেশনগুলি সংরক্ষণ করা আরও সুরক্ষিত। যদি আপনার .htaccess ফাইলটি না থাকে (কারণ কেউ ভের ফোল্ডারটি মুছে ফেলেছে), আপনার সেশন ফাইলগুলি বাইরে থেকে অ্যাক্সেসযোগ্য হবে না।
এরফান

8
ডাটাবেসে সেশনগুলি সংরক্ষণ করা একটি খারাপ ধারণা। এটি সে উদ্দেশ্যে ডিজাইন করা হয়নি এবং মাইএসকিউএল সেশন স্টোরেজের জন্য খুব দরিদ্র হাতিয়ার হিসাবে কাজ করে, লক করা একটি মুখ্য সমস্যা হ'ল - শুদ্ধকরণের জন্য কোনও বিল্ট-ইন সমর্থন উল্লেখ না করা।
বেন লেসানী - সোনাসি

28

ফাইল ভিত্তিক সেশনগুলির সাথে, তারা পিএইচপি সেশন ক্লিন-আপ ক্রোন দ্বারা স্বয়ংক্রিয়ভাবে ছাঁটাই করা হবে - সুতরাং ফাইলগুলি তৈরির ~ 7200 সেকেন্ডের মধ্যে মুছে ফেলা হতে পারে। এমনকি কোনও ব্যস্ত সাইটে (প্রতিদিন 30k অজানা), সাধারণত ./var/session এ প্রায় 4,000 সেশন ফাইল থাকে - এটি নিম্ন-শেষ লিনাক্স সার্ভারের জন্যও কিছুই নয়।

তবে পরিষ্কার-পরিচ্ছন্নতা ক্রোন ক্রিয়াকলাপের উপর নির্ভর করে - যা সাধারণত ম্যাজেন্টোর ./var/session ডিরেক্টরিতে দেখা যায় না। সুতরাং আপনার একটি নতুন সিস্টেম ক্রোন সেট আপ করা উচিত

/usr/bin/find /home/myuser/public_html/var/session -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 -exec rm {} \; >/dev/null 2>&1

সেশনের জন্য ডিফল্ট ক্লিন আপ পিরিয়ডটি 7200 সেকেন্ড, যা পর্যাপ্ত পরিমাণের চেয়ে বেশি হওয়া উচিত, যদিও আপনি উপরের অনুসারে পরিবর্তন করতে পারেন।

মেমকেচে সেশনগুলির সাথে, টিসিপি / আইপি হ'ল একমাত্র ওভারহেড - যা একক সার্ভার স্থাপনার জন্য এটি ফাইল ভিত্তিক চেয়ে ধীর করে দেয়। সুতরাং, আপনি পরিবর্তে একটি ইউনিক্স সকেট ব্যবহার করবেন, যা ওভারহেড সরিয়ে দেয় এবং আরও ভাল সুরক্ষা দেয়। তবুও তবুও, আপনার গ্রাহক সেশনগুলি আপনি যে পরিমাণ র‌্যাম বরাদ্দ করতে পারবেন তা ছাড়িয়ে / সীমাবদ্ধ করা হবে। গড় ম্যাজেন্টো সেশনটি 4Kb - সুতরাং আপনি যে এমবি বরাদ্দ করেন আপনি 256 সক্রিয় সেশনগুলিকে সমর্থন করতে সক্ষম হবেন। সুতরাং গ্রাহকরা এলোমেলোভাবে কার্ট / সেশন হারাতে এড়ানোর জন্য একটি উপযুক্ত সীমা নির্ধারণ করতে ভুলবেন না। এবং এটিও মনে রাখবেন, একটি মেমক্যাচ ডেমন পুনরায় চালু সমস্ত বিদ্যমান সেশনগুলি (বিএডি!) মুছবে।

রেডিসের সাথে (নেটিভ নয়, তবে একটি এক্সটেনশনের মাধ্যমে উপলভ্য), আপনি মেমকেচে হিসাবে একই স্তরের সমর্থন পাবেন তবে অধ্যবসায়ের অতিরিক্ত সুবিধা সহ (যদি আপনি এটি ব্যবহার করতে চান)। Cm_Redis এক্সটেনশনের সাহায্যে আপনি সেশন সংক্ষেপণের সুবিধাও নিতে পারবেন। আমরা খুঁজে পেয়েছি যে এই এক্সটেনশনটি সিই এবং ইই উভয় মোতায়েনের ক্ষেত্রে খুব ভাল কাজ করে।

ডিবি সহ, ডিফল্ট ছাঁটাইয়ের মেয়াদোত্তীর্ণকরণ সেটিংটি এক শক্তিশালী 1 সপ্তাহ, সুতরাং উপরের স্টোরের আকার হিসাবে উদাহরণ হিসাবে (প্রতিদিন 30k অজানা), আপনি প্রায় 7 গিগাবাইটের কোর_ক্যাচি_অ্যাসিওশন জন্য একটি ডিবি টেবিলের আকারের দিকে তাকিয়ে থাকবেন - যা গ্রাইন্ড হবে প্রায় প্রতিটি সেশন ভিত্তিক ক্রিয়াকলাপের জন্য আপনার স্টোরটি সম্পূর্ণ থামবে।

বৃহত (প্রতিদিন ২৩০ কে অনন্য দর্শক) এবং ছোট (প্রতিদিন <1k অনন্য দর্শক) স্টোর উভয়ের হোস্টিংয়ের অভিজ্ঞতা থেকে , আমাদের সুপারিশটি হ'ল:

একক-সার্ভার স্থাপনা - ফাইল

মাল্টি-সার্ভার মোতায়েন - পুনর্বার

আমি এখানে কিছু সত্যিই পুঙ্খানুপুঙ্খ জবাব লিখেছি http://mamabase.com/magento-tutorials/magento-session-stores- which-to-choose-and-why/comment-page-1/#comment-1980


2
যদি ক্লিন আপ ক্রোনটি সেশনগুলি সাফ করার জন্য মনে করা হয়, তবে কেন এটি ব্যর্থ হয় এবং কীভাবে এই সমস্যাটিকে নতুন ক্রোন তৈরি করার পরিবর্তে সমাধান করা যেতে পারে যা চারপাশের কাজের মতো মনে হয়?
গোস

12

কিছুক্ষণ আগে আমি একটি সম্পর্কিত প্রশ্ন জিজ্ঞাসা করেছি:

https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification

যা আমি কখনই জানতে পারি না (আমি সেই চাকরিটি নতুনটির জন্য ছেড়ে দিয়েছি, এবং মূল সমস্যাটি অন্য কারও হয়ে উঠেছে) হ'ল যদি ম্যাগেন্টোর সেশনগুলি এই সেটিংসগুলিকে সম্মান জানায়, বা যদি তারা জেন্ড ব্যবহার করে তাদের সেশন হ্যান্ডলিং বাস্তবায়ন করে (এবং সম্ভবত কিছুটা zend.ini হয়) কনফিগার ফাইল)।

পিএইচপি সেটিংস দেখুন:

session.gc_maxlifetime session.gc_probability session.gc_divisor

http://php.net/manual/en/session.configuration.php#ini.session.gc-probability


আমি নিজেই এটি জানতে আগ্রহী, আমার অভিজ্ঞতা থেকে দেখে মনে হচ্ছে যে ম্যাজেন্টো এই সেটিংসগুলিকে সম্মান দিচ্ছে না (আমি মনে করি জিবি'র সেশন ফাইলের মূল্য কতটা নিরাপদ হবে তা ধরে নেওয়া নিরাপদ হবে যে কোনও সময় জিসি ট্রিগার করেছিল) have তাই আমি নিরাপদে থাকার জন্য ক্রোন জব হিসাবে সবেমাত্র বেনের প্রস্তাবিত স্ক্রিপ্ট সেট আপ করেছি।
জাভিয়ের ভিলানুয়েভা

7

সাধারণত ক্রোন জবই যথেষ্ট, তবে কিছু বিষয় মনে রাখা উচিত:

1) অধিবেশনটি session.gc_maxlifetime( php -i | grep session.gc_maxlifetime) সেকেন্ডের চেয়ে বেশি স্থিতিতে সেট করুন (এটি php.ini বা .htaccess দ্বারা আবর্জনা সংগ্রহের জন্য প্রস্তুত মেয়াদোত্তীর্ণ সেশনগুলি সেট আপ করবে)

২) আপনি কীভাবে এটি করতে পারেন তার আরও তথ্যের জন্য এখানে ডাটাবেসে সেশনগুলি সঞ্চয় করতে চান (কাস্টম ম্যাজেন্টো মডিউলটির মাধ্যমে এই বিকল্পটি পরিচালনা করা আরও সহজ হতে পারে)

3) বিবেচনার জন্য আরেকটি বিকল্প হ'ল মেমক্যাচড জাদুকরী সার্ভারগুলিও গতি বাড়িয়ে তুলতে পারে (যদিও প্রশ্নের সাথে পুরোপুরি সংযুক্ত নেই, আমি মনে করি এটি সম্পর্কে জেনে রাখা দরকারী)

আরও তথ্যের জন্য এই প্রশ্নটি দেখুন: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept


2
সমস্ত সেশন ফাইলগুলি সরিয়ে ফেলার জন্য ক্রোনজব ব্যবহার করা অগ্রহণযোগ্য। ক্রোন চালানোর 10 মিনিট আগে কোনও ব্যবহারকারী তাদের কার্টে স্টাফ যুক্ত করলে কী ঘটে? তাদের গাড়িটি মুছে গেছে! যদি পিএইচপি-র আবর্জনা সংগ্রহ কাজ না করে থাকে তবে তা খুঁজে বের করা দরকার।
ডেভিডালগার

+1 @ ডেভিডালগার ভালো কথা, আমি (ভুল) অনুমানের অধীনে ছিলাম যে কেবল মেয়াদোত্তীর্ণ সেশনগুলি ক্রোনজবের মাধ্যমে মুছে ফেলা হচ্ছে
পিজিরকিন্ড

1
@ ডেভিডালগার - পিএইচপি-র নিজস্ব আবর্জনা সংগ্রহ ক্রোনের মাধ্যমে পরিচালনা করে। এটি সহজেই findসমস্ত ফাইল পুরানো sess.gc_maxlifetimeএবং সেগুলি সরিয়ে দেয়। ক্রোন এর মাধ্যমে সেশনগুলি মুছে ফেলা সাধারণ, নিরাপদ এবং গ্রহণযোগ্য আচরণ।
বেন লেসানী - সোনাসি

1
আসলে, না, এটা না। যখন একটি পিএইচপি স্ক্রিপ্ট কার্যকর করার সময় সেশন শুরু হয় তখন সেশন আবর্জনা সংগ্রহ করা হয়। কত ঘন ঘন গার্বেজ কালেকশন চালানো হয় মান উপর নির্ভর করে session.gc_probabilityএবং session.gc_divisorsession.gc_maxlifetimeসর্বনিম্ন মান সহকারীর জন্য যদি বিভিন্ন স্ক্রিপ্টগুলির বিভিন্ন মান থাকে তবে নির্ধারণ করা হবে যে সেশন স্টোরেজটি বিশ্বব্যাপী হওয়ায় আর কতক্ষণ স্টাফের ঝুলন্ত রয়েছে এবং সেই স্ক্রিপ্টের প্রয়োগের ফলে অন্যান্য স্ক্রিপ্ট সেশনের অবজেক্টগুলি পরিষ্কার হয়ে যাবে।
ডেভিডালগার

5

আমাদের সমস্ত সেটআপে আমাদের একটি রক্ষণাবেক্ষণ.এফপি ফাইল রয়েছে যা একবারে একবারে লগ এবং ভেরি ডিরেক্টরিটি পরিষ্কার করার যত্ন নেয়। যেহেতু সেশনগুলি হয় হয় ডাটাবেসে বা ফাইল সিস্টেমে সংরক্ষণ করতে হয়, এই রক্ষণাবেক্ষণ ফাইলটি উভয়ই সাফ করে দেবে। (নীচের কোড দেখুন)

লগগুলি সাফ করতে আপনি ক্রোন জব হিসাবে নিম্নলিখিত কমান্ডটি চালাতে পারেন:

php maintenance.php clean=log

উপরের কমান্ডটি নিম্নলিখিত আউটপুট উত্পাদন করবে:

catalogindex_aggregation has been truncated
catalogindex_aggregation_tag has been truncated
catalogindex_aggregation_to_tag has been truncated
catalog_compare_item has been truncated
dataflow_batch_export has been truncated
dataflow_batch_import has been truncated
log_customer has been truncated
log_quote has been truncated
log_summary has been truncated
log_summary_type has been truncated
log_url has been truncated
log_url_info has been truncated
log_visitor has been truncated
log_visitor_info has been truncated
log_visitor_online has been truncated
report_compared_product_index has been truncated
report_event has been truncated
report_viewed_product_index has been truncated

ভেরর ফোল্ডারটি পরিষ্কার করার জন্য আপনি ক্রোন জব হিসাবে নিম্নলিখিত কমান্ডটি চালাতে পারেন:

php maintenance.php clean=var

উপরের কমান্ডটি নিম্নলিখিত আউটপুট উত্পাদন করবে:

downloader/.cache/* has been emptied
downloader/pearlib/cache/* has been emptied
downloader/pearlib/download/* has been emptied
var/cache/ has been emptied
var/locks/ has been emptied
var/log/ has been emptied
var/report/ has been emptied
var/session/ has been emptied
var/tmp/ has been emptied

আসল কোড (আপনার স্থানীয়.xml ফাইলের জন্য পথটি সামঞ্জস্য করতে ভুলবেন না):

<?php
$xml = simplexml_load_file('./app/etc/local.xml', NULL, LIBXML_NOCDATA);

$db['host'] = $xml->global->resources->default_setup->connection->host;
$db['name'] = $xml->global->resources->default_setup->connection->dbname;
$db['user'] = $xml->global->resources->default_setup->connection->username;
$db['pass'] = $xml->global->resources->default_setup->connection->password;
$db['pref'] = $xml->global->resources->db->table_prefix;

if (!isset($argv[1]) || !stristr($argv[1], 'clean=')) {
    echo 'Please use one of the commands below:' . PHP_EOL;
    echo 'php maintenance.php clean=log' . PHP_EOL;
    echo 'php maintenance.php clean=var' . PHP_EOL;
    die;
}

$method = str_replace('clean=', '', $argv[1]);

switch ($method) {
case 'log':
    clean_log_tables();
    break;
case 'var':
    clean_var_directory();
    break;
default:
    echo 'Please use one of the commands below:' . PHP_EOL;
    echo 'php maintenance.php clean=log' . PHP_EOL;
    echo 'php maintenance.php clean=var' . PHP_EOL;
    break;
}

function clean_log_tables() {
    global $db;

    $tables = array(
        'catalogindex_aggregation',
        'catalogindex_aggregation_tag',
        'catalogindex_aggregation_to_tag',
        'catalog_compare_item',
        'dataflow_batch_export',
        'dataflow_batch_import',
        'log_customer',
        'log_quote',
        'log_summary',
        'log_summary_type',
        'log_url',
        'log_url_info',
        'log_visitor',
        'log_visitor_info',
        'log_visitor_online',
        'report_compared_product_index',
        'report_event',
        'report_viewed_product_index'
    );

    mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
    mysql_select_db($db['name']) or die(mysql_error());

    foreach($tables as $v => $k) {
        @mysql_query('TRUNCATE `'.$db['pref'].$k.'`');
        echo $db['pref'] . $k . ' has been truncated' . PHP_EOL;
    }
}

function clean_var_directory() {
    $dirs = array(
        'downloader/.cache/*',
        'downloader/pearlib/cache/*',
        'downloader/pearlib/download/*',
        'var/cache/',
        'var/locks/',
        'var/log/',
        'var/report/',
        'var/session/',
        'var/tmp/'
    );

    foreach($dirs as $v => $k) {
        exec('rm -rf '.$k);
        echo $k . ' has been emptied' . PHP_EOL;
    }
}

5

ম্যাজেন্টো সিএমএস এবং এর মতো (যেগুলি পুরানো সেশনগুলি পরিষ্কার করছে না), আমি কেবল পিএইচপি.আইএনই সেটিংসের ভিত্তিতে ক্রোন জব ব্যবহার করি।

পিএইচপি 5 / উবুন্টু 14.04 / ডেবিয়ান

পিএইচপি 5 এর জন্য সিস্টেম ক্রোন.ড সেটআপটি ম্যাজেন্টো ./var/session (অথবা ডিফল্ট সেশন ফোল্ডার (উরুন্টু / / var / lib / php5 / সেশনগুলির জন্য / var / lib / php5 এবং অন্য বেশিরভাগ লিনাক্সের জন্য / tmp / পরিষ্কার করে না) dists)।

তবে আপনি এখনও ডিফল্ট পিএইচপি 5 / ডেবিয়ান সিস্টেম ক্রোন অনুসারে "সেশনকল্যান" এবং "ম্যাক্সলাইফটাইম" ব্যবহার করতে পারেন:

কমান্ড লাইন থেকে আপনি চেষ্টা করতে পারেন উদাহরণ:

# sudo /usr/lib/php5/sessionclean /var/www/{yoursite}/var/session $(/usr/lib/php5/maxlifetime)

সুতরাং কেবল একটি সিস্টেম / রুট ক্রোনট্যাব বা সেশন ফাইলগুলির জন্য অনুমতি পড়ার / লেখার অনুমতিপ্রাপ্ত ব্যবহারকারীর ক্রোন্টাবের মধ্যে এটি অন্তর্ভুক্ত করুন:

$ sudo crontab -e

এটি যোগ করুন আপনি এটি সিস্টেম পিএইচপি ক্রনের সাথে দেখতে অনুরূপ দেখতে চান:

20,40 * * * * [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/www/*/var/session ] && /usr/lib/php5/sessionclean /var/www/{yoursite}/var/session $(/usr/lib/php5/maxlifetime)

বা - যেহেতু আমরা জানি সেই ফাইলগুলি / ডায়ারগুলি বিদ্যমান:

20,40 * * * * /usr/lib/php5/sessionclean /var/www/*/var/session $(/usr/lib/php5/maxlifetime)

এখন আমার বেশিরভাগ সেশন রয়েছে এবং এটি পিএইচপি.আইএনআই (ক্লায়েন্ট) সেটিংসের মাধ্যমে ডিফল্ট আবর্জনা সংগ্রহ / আজীবন দিয়ে পরিষ্কার রাখা হয়।

(আপনি উপরে ওয়াইল্ডকার্ড ছেড়ে যেতে পারেন বা সিটেনামের সাথে প্রতিস্থাপন করতে পারেন))

সম্পাদনা (পিএইচপি 7 / উবুন্টু 16.xx / দেবিয়ান):

'অধিবেশন' স্ক্রিপ্টটি পরিবর্তিত হয়েছে এবং ম্যাক্স লাইফটাইম স্ক্রিপ্ট সরানো হয়েছে। সিস্টেম / পিএইচপি ক্রোন কাজের জন্য এটি এখন একটি স্ক্রিপ্ট। ফাইল কলগুলি এখন স্ক্রিপ্টে স্থিতিশীল হওয়ায় আপনি এটি আর ব্যবহার করতে পারবেন না।

পুরানো পিএইচপি 5 অধিবেশন স্ক্রিপ্ট এখনও আপনার জন্য কাজ করতে পারে যদি সিস্টেমটি পরিষ্কার না করে। আপনি যা করতে পারেন তা হ'ল পুরানো ডেবিয়ান পিএইচপি 5 প্যাকেজটি হ'ল sessioncleanএটি থেকে বের করা। অথবা আপনি এটিকে সহজেই আপনার স্ক্রিপ্টগুলিতে অনুলিপি করতে পারেন (যথাযথ / var / www / (সাইট) অনুমতি / মালিকানা দেওয়া):

#!/bin/sh

# first find all used files and touch them (hope it's not massive amount of files)
[ -x /usr/bin/lsof ] && /usr/bin/lsof -w -l +d "${1}" | awk -- '{ if (NR > 1) { print $9; } }' | xargs -i touch -c {}

# find all files older then maxlifetime
find "${1}" -depth -mindepth 1 -maxdepth 1 -ignore_readdir_race -type f -cmin "+${2}" -delete

আমি এটির নামকরণেরও পরামর্শ দিচ্ছি, সুতরাং এটি নতুন পিএইচপি 'সেশনলেশন' ক্রোনজব নিয়ে বিভ্রান্ত নয়। তারপরে আপনি নিজের মতো করে নিজের "ম্যাক্স লাইফটাইম" নম্বরটি প্লাগ করতে পারেন:

     20,40 * * * * /home/-username-/scripts/MySessionClean /var/www/*/var/session 61

(Age১ উদাহরণ বয়সের (মিনিটের মধ্যে) এবং 'মাইসেশনক্লিয়ান' নাম পরিবর্তন করে পিএইচপি 5 স্ক্রিপ্ট ডাউনলোড করা বা উপরে থেকে অনুলিপি করা)।

এই পদ্ধতিতে আমরা পুরোপুরি php.ini / env কল এড়িয়ে চলে।

(১৩ ডিসেম্বর ২০১6 এডিট করুন: ডেবিয়ান আর্কাইভ রেপো লিঙ্ক আপডেট হয়েছে)


3

আমি পুরানো এই সমস্ত সেশন ফাইলগুলি থেকে নিয়মিতভাবে ডিবি সাফ করে দিয়েছি। এটি ম্যানুয়াল কাজগুলিকে জ্বালাময়ী করে দিয়েছিল যতক্ষণ না আমি ম্যাগেন্টো অপ্টিমাইজার ইনস্টল করেছি যা আমার জন্য এই সমস্ত রুটিন কাজ করে। এছাড়াও, আমার ক্যাশে ক্রমাগত রিফ্রেশ হয় এবং আমি পণ্য এবং স্ট্যাটিক ব্লক পরিবর্তনের পরে এটি ম্যানুয়ালি করি না। ওহ, হ্যাঁ, ত্রুটির প্রতিবেদন এবং পরিত্যক্ত গাড়িগুলিও পরিষ্কার করা হয়।


3

উপরের সমস্ত মন্তব্যগুলির মধ্যে, আমি মনে করি এটি সহজ সমাধান এবং পুরানো সেশন ফাইলগুলি পরিচালনা করতে এবং নতুন সেশন ফাইলগুলি রাখতে তৃতীয় পক্ষের এক্সটেনশন ইনস্টল করার জন্য এটি দীর্ঘ স্ক্রিপ্টগুলির চেয়ে ভাল better

  1. আপনার magentoফোল্ডারের নীচে "clean_session.sh" ফাইলের নাম তৈরি করুন ।
  2. এই লাইনগুলি আটকান।

#!/bin/bash
# delete session files older than 14 days
find /home/DOMAIN/public_html/var/session -name 'sess_*' -type f -mtime +14 -exec rm {} \;

  1. তারপরে আপনি সাফ সাফ করার জন্য সাপ্তাহিক ক্রোনজব শিডিউল করতে পারেন।

1 1 * * 6 /bin/sh /home/DOMAIN/public_html/clean_session.sh

  1. হিসাবে ফাইল এক্সিকিউটেবল করতে ভুলবেন না

chmod u+x clean_session.sh

  1. এবং আপনি এটি হিসাবে চালাতে পারেন

sh clean_session.sh


3

আমার ক্ষেত্রে, আমি এই স্ক্রিপ্টটি magento/var/এক সপ্তাহেরও বেশি -mtime +7পুরানো সেশন ফাইলগুলি মুছার জন্য ডিরেক্টরিতে রেখেছি ( ):

#!/bin/sh
# Place this script in magento/var/ directory

for n in `seq 0 9`
  do
    for u in `seq 0 9`
    do
      for m in `seq 0 9`
        do
          name="sess_"$n$u$m*
          echo $name
          find session/ -name $name -type f -mtime +7 -delete
          echo $name ok
      done
      for m in {a..z}
        do
          name="sess_"$n$u$m*
          echo $name
          find session/ -name $name -type f -mtime +7 -delete
          echo $name ok
      done
    done
      for u in {a..z}
      do
        for m in `seq 0 9`
          do
            name="sess_"$n$u$m*
            echo $name
            find session/ -name $name -type f -mtime +7 -delete
            echo $name ok
        done
        for m in {a..z}
          do
            name="sess_"$n$u$m*
            echo $name
            find session/ -name $name -type f -mtime +7 -delete
            echo $name ok
        done
    done
done

for n in {a..z}
  do
    for u in `seq 0 9`
      do
        for m in `seq 0 9`
          do
            name="sess_"$n$u$m*
            echo $name
            find session/ -name $name -type f -mtime +7 -delete
            echo $name ok
        done
        for m in {a..z}
          do
            name="sess_"$n$u$m*
            echo $name
            find session/ -name $name -type f -mtime +7 -delete
            echo $name ok
        done
    done
    for u in {a..z}
      do
        for m in `seq 0 9`
          do
            name="sess_"$n$u$m*
            echo $name
            find session/ -name $name -type f -mtime +7 -delete
            echo $name ok
        done
        for m in {a..z}
          do
            name="sess_"$n$u$m*
            echo $name
            find session/ -name $name -type f -mtime +7 -delete
            echo $name ok
        done
    done
done

এটি আমার প্রথম বাশ স্ক্রিপ্ট (পুনর্বিবেচনা 2) এবং আমি মনে করি এটি বেশ কয়েকটি ক্ষেত্রে অনুকূলিত হতে পারে। আমি কোনও অপ্টিমাইজেশনের পরামর্শের জন্য উন্মুক্ত।

এই স্ক্রিপ্টটি এখানে পাওয়া যাবে: https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2


0

আমি একটি স্ক্রিপ্ট তৈরি করেছি যা ভের / সেশন ডিরেক্টরি খালি করে। আপনি প্রতিদিন এটি চালানোর জন্য ক্রোন জব এ যুক্ত করতে পারেন যা পর্যাপ্ত হওয়া উচিত এবং প্রয়োজনীয় হিসাবে সামঞ্জস্য করা উচিত। আপনি লক্ষ্য করবেন যখন সেশন ডিরেক্টরিটি পূর্ণ হয়ে যাবে, সিপেনেল বা এসএসএসের মাধ্যমে ফাইলগুলি মুছে ফেলা অসম্ভব, এই স্ক্রিপ্টটি ম্যাজেন্টো রুট ডিরেক্টরিতে ঠিক কৌশলটি চালিয়ে যাবে।

<?php
function adjustSessionFiles($dir, $pattern = "*")
{
    $files = glob($dir . "/$pattern");
    foreach ($files as $file) {
        if (is_dir($file) and !in_array($file, array('..', '.')))  {
            adjustSessionFiles($file, $pattern);
        }else if(is_file($file) and ($file != __FILE__)) {
            unlink($file);
        }
    }
}
$dir = __DIR__ . DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'session';
adjustSessionFiles($dir);

এই স্ক্রিপ্টটির সমস্যাটি হ'ল এটি কেবল পুরানোগুলিই নয়, সমস্ত সেশন মুছে দেয়। সুতরাং কেউ এক দিনের চেয়ে বেশি লগ ইন করতে পারবেন না (যদি আপনি এটি প্রতিদিন চালান) এবং এটি চালানোর পরে সমস্ত কার্ট খালি থাকবে (সুতরাং কোনও কার্ট একটি দিনের চেয়ে বেশি সময় ধরে রাখবে না)।
সিমোথেন্সোরেরার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.