اصلاح تکمیل سینک ژوپینگ - 2026-08-19 ==================================== علت قطعی پیدا شده در لاگ‌های بسته ارسالی: - منبع 1444 محصول را کامل پیدا می‌کند. - اجرای PHP با خطای Maximum execution time of 30 seconds قبل از پایان می‌میرد. - اجرای بعدی دوباره از ابتدای دسته شروع می‌شود؛ بنابراین بخش انتهایی دسته هیچ‌وقت پردازش نمی‌شود. - sync_map داخل state.json فقط 234 نگاشت داشت. این نسخه چه می‌کند: - هر اجرا از محل توقف قبلی ادامه می‌دهد (data_xuping/scan_progress.json). - قبل از سقف 30 ثانیه امن متوقف می‌شود و اجرای بعدی ادامه می‌دهد. - نگاشت محصولات را در journal سبک data_xuping/sync_map.jsonl می‌نویسد و دیگر برای هر رنگ فایل چندمگابایتی state.json را کامل decode/encode نمی‌کند. - برای جلوگیری از جاافتادن محصولی که وسط درخواست قطع شده، یک محصول هم‌پوشانی دارد؛ sync-map مانع ساخت تکراری همان محصول می‌شود. - متغیر اشتباه BASE_URL داخل main نیز اصلاح شده است. نصب امن روی سرور ---------------- 1) فایل zip اصلاحی را داخل این مسیر آپلود کنید: /home/aminzari/public_html/xuping_mixin_full_bundle 2) سپس اجرا کنید (نام zip را مطابق نام فایل آپلودی بگذارید): cd /home/aminzari/public_html/xuping_mixin_full_bundle cp check_xuping_mixin_sync.php check_xuping_mixin_sync.php.backup_20260819 unzip -o xuping_completeness_hotfix_20260819.zip php -l check_xuping_mixin_sync.php php -l xuping_sync_status.php grep -n XUPING_COMPLETENESS_FIX check_xuping_mixin_sync.php خروجی grep باید عبارت full-cycle-once-daily-v3-2026-08-19 را نشان دهد. مهم: state.json را حذف نکنید. پوشه data_xuping را نیز پاک نکنید. اجرای آزمایشی ------------- php check_xuping_mixin_sync.php خروجی سالم باید حداقل خط‌های START و BATCH و در پایان OK را داشته باشد. نمونه: START patch=full-cycle-once-daily-v3-2026-08-19 baseline=0 BATCH category=511736 total=1445 start=0 selected=1445 next=0 ... OK در نسخه v3 نباید TIME_BUDGET_STOP دیده شود؛ همان اجرا تا پایان دسته ادامه می‌دهد. کرون پیشنهادی ------------- نسخه v3 برای یک اجرای کامل در روز تنظیم شده است. خط کرون را مستقیم مثل یک دستور shell اجرا نکنید؛ آن را در بخش Cron Jobs سی‌پنل وارد کنید: 0 2 * * * /usr/local/bin/php -q /home/aminzari/public_html/xuping_mixin_full_bundle/check_xuping_mixin_sync.php >> /home/aminzari/public_html/xuping_mixin_full_bundle/data_xuping/cron_out.log 2>> /home/aminzari/public_html/xuping_mixin_full_bundle/data_xuping/cron_err.log یا برای ثبت از خود ترمینال، این دستور یک‌خطی را اجرا کنید: ( crontab -l 2>/dev/null | grep -v 'check_xuping_mixin_sync.php'; echo '0 2 * * * /usr/local/bin/php -q /home/aminzari/public_html/xuping_mixin_full_bundle/check_xuping_mixin_sync.php >> /home/aminzari/public_html/xuping_mixin_full_bundle/data_xuping/cron_out.log 2>> /home/aminzari/public_html/xuping_mixin_full_bundle/data_xuping/cron_err.log' ) | crontab - سپس ثبت شدن آن را بررسی کنید: crontab -l | grep check_xuping_mixin_sync.php قفل run.lock اجازه هم‌زمان شدن دو اجرا را نمی‌دهد. اجرای روزانه ساعت 02:00 آغاز می‌شود و تا پایان کل دسته باز می‌ماند. دیدن وضعیت ----------- php xuping_sync_status.php وقتی این خط حداقل 1 شد، یک دور کامل همه محصولات منبع پیمایش شده است: CATEGORY_COMPLETED_CYCLES_511736=1 UNIQUE_MAPPED_SOURCE_PRODUCTS تعداد محصول‌های منبعی است که حداقل یک نگاشت مقصد دارند. EFFECTIVE_DESTINATION_MAPPINGS ممکن است بیشتر باشد، چون هر رنگ ژوپینگ به یک محصول مستقل در مقصد تبدیل می‌شود. بررسی آخرین خطاها: tail -n 80 data_xuping/cron_err.log tail -n 120 data_xuping/cron_trace.log