Projeler ve ajans desteği için müsait · Hızlı yanıt, işi yapan kişiden

PrestaShop CRON görevleri (dışa aktarımlar, senkronizasyonlar) çalışmıyor

Günlük bir CSV dışa aktarımı gibi bir PrestaShop CRON görevi neredeyse hiçbir zaman PrestaShop'un kendisi tarafından çalıştırılmaz: genellikle bir token parametresiyle korunan belirli bir URL'dir ve barındırıcıdaki gerçek bir sistem cron'unun bunu düzenli aralıklarla çağırması gerekir. Her gün otomatik dışa aktarım vaat eden bir eklenti kurmak, barındırıcı tarafında bu cron kaydı olmadığı sürece tek başına yeterli değildir.

Sorunumu anlatayım Mesaj gönderin

Zamanlanmış görev, dahili bir zamanlayıcı değildir

Her gün otomatik dışa aktarım vaat eden bir eklenti, aslında yalnızca index.php?controller=...&token=... gibi çağrılması gereken bir URL hazırlar. PrestaShop bu işlemi kendi başına tetiklemek için sürekli olarak saati izlemez.

Bu URL'yi düzenli aralıklarla çağırması gereken şey, barındırıcıda kurulan gerçek bir sistem cron'udur; bir crontab kaydı veya müşteri panelindeki karşılığı. Bu kayıt olmadan görev, test için elle tıklandığında kusursuz çalışır ama sonrasında kendiliğinden asla tetiklenmez. Bu belirtinin arkasındaki en sık karışıklık budur.

Neden test sırasında çalışıyor ama kendiliğinden hiç çalışmıyor

Bazı giriş seviyesi paylaşımlı barındırma paketleri gerçek bir sistem cron'u oluşturmayı sınırlar, hatta hiç izin vermez; ya da yalnızca yüksek bir minimum aralıkla sınırlı sayıda kayda izin verir. Eklenti kötü tasarlanmış gibi görünür, oysa barındırıcı tarafında eksik olan şey bir cron programlama imkânının kendisidir.

Bir diğer sık neden: bir HTTP çağrısının izin verdiği süreden daha uzun süren bir betik. Klasik bir web isteğiyle tetiklenen bir cron genellikle birkaç on saniyelik bir çalışma süresiyle sınırlıdır; büyük bir kataloğu işleyen bir dışa aktarım veya senkronizasyon bu süreyi aşıp yarıda kesilebilir, bu da hiçbir şekilde açıkça bildirilmez.

Neyi kontrol edip yapılandırıyorum

  1. Beklenen tam URL

    Genellikle zamanlanmış görevin veya ilgili eklentinin yapılandırma ekranında görünen, token parametresiyle birlikte tam URL'yi alıyorum.

  2. Barındırıcıda gerçek bir cron'un mevcut olup olmadığı

    Barındırma paketinin, gerçek ihtiyaca uygun bir sıklıkla (günlük, saatlik...) bir sistem cron kaydı oluşturmaya izin verdiğini kontrol ediyorum.

  3. Betiğin çalışma süresi

    İşlem bir HTTP çağrısının izin verdiği süreyi aşıyorsa, işin gruplar hâlinde bölünmesi mi yoksa komut satırından çalıştırılmaya geçilmesi mi gerektiğini kontrol ediyorum.

  4. Çalıştırmanın gerçek sonucu

    Otomatik olarak çağrılan URL'nin, oturum veya izin eksikliğinden kaynaklanan sessiz bir hata değil, elle yapılan çağrıyla aynı sonucu ürettiğinden emin oluyorum.

İlgili sayfalar

İhtiyacınızı bir dakikada anlatın

Size bir anket daha değil, doğrudan bir tahmin sunabilmem için birkaç hedefli soru.

tache
frequence-actuelle
temps-passe (facultatif)
outils (facultatif)
plateforme (facultatif)
Size dönebilmem için en az bir e-posta veya telefon numarası belirtin.

Size dönebilmem için en az bir e-posta veya telefon numarası belirtin.

Sıkça sorulan sorular

Dışa aktarımım tıkladığımda çalışıyor ama kendiliğinden hiç çalışmıyor, neden?
Çünkü tıklamak URL'yi elle tetikler; oysa barındırıcıda bunu otomatik olarak çağıracak hiçbir sistem cron'u yapılandırılmamıştır. Bunlar iki farklı şeydir.
Barındırıcım cron oluşturma imkânı sunmuyor, ne yapmalıyım?
Bazı giriş seviyesi paylaşımlı paketler buna izin vermez veya ciddi şekilde sınırlar. Aynı barındırıcıda bir alternatif kontrol edilmeli, ya da bu ihtiyaç için farklı bir pakete geçilmelidir.
Dışa aktarım her zaman aynı noktada duruyor, neden?
Genellikle bir HTTP isteği için izin verilen sürenin aşılmasıdır. Betiğin daha küçük gruplar hâlinde veri işleyecek şekilde uyarlanması veya bir URL yerine komut satırından çalıştırılması gerekir.
Bir PrestaShop CRON görevi, klasik bir Linux cron görevinden farklı mıdır?
İlke olarak hayır, ama PrestaShop komut satırından doğrudan çalıştırılan bir betik yerine çağrılması gereken bir URL sunar. İkisi arasındaki bağlantıyı barındırıcının sistem cron'u kurar.
Barındırıcıda bir cron yapılandırmak her zaman yeterli midir?
Her zaman değil. Betik başka nedenlerle başarısız oluyorsa, süre aşımı, yetersiz bellek, dışa aktarımda bir mantık hatası, cron'u yapılandırmak yalnızca tetiklemeyi çözer, işlemin kendisini değil.