Elastic Beanstalk'a şu şekilde bir cron işi ekledim:
Zaten yoksa, uygulamanızın kök dizininde .ebextensions adlı bir klasör oluşturun. Sonra, .ebextensions klasörünün içinde bir yapılandırma dosyası oluşturun. Örnekleme amacıyla example.config kullanacağım. Ardından bunu example.config dosyasına ekleyin
container_commands:
01_some_cron_job:
command: "cat .ebextensions/some_cron_job.txt > /etc/cron.d/some_cron_job && chmod 644 /etc/cron.d/some_cron_job"
leader_only: true
Bu, Elastic Beanstalk için bir YAML yapılandırma dosyasıdır. Bunu metin düzenleyicinize kopyaladığınızda, metin düzenleyicinizin sekmeler yerine boşluklar kullandığından emin olun. Aksi takdirde, bunu EB'ye ittiğinizde YAML hatası alırsınız.
Yani bunun yaptığı 01_some_cron_job adlı bir komut oluşturmaktır. Komutlar alfabetik sıraya göre çalıştırılır, böylece 01 ilk komut olarak çalıştırılmasını sağlar.
Komut daha sonra some_cron_job.txt adlı bir dosyanın içeriğini alır ve bunu /etc/cron.d'deki some_cron_job adlı bir dosyaya ekler.
Komut daha sonra /etc/cron.d/some_cron_job dosyasındaki izinleri değiştirir.
Leader_only anahtarı, komutun yalnızca lider olarak kabul edilen ec2 örneğinde çalıştırılmasını sağlar. Çalıştırdığınız her ec2 örneğinde çalıştırmak yerine.
Sonra, .ebextensions klasörünün içinde some_cron_job.txt adlı bir dosya oluşturun. Cron işlerinizi bu dosyaya yerleştireceksiniz.
Yani mesela:
# The newline at the end of this file is extremely important. Cron won't run without it.
* * * * * root /usr/bin/php some-php-script-here > /dev/null
Yani bu cron işi, kök kullanıcı olarak her günün her saatinde her dakika çalışacak ve çıktıyı / dev / null'a atacaktır. / usr / bin / php, php'ye giden yoldur. Sonra bazı-php-script-here yerine php dosyanızın yolunu yazın. Bu açıkça cron işinizin bir PHP dosyası çalıştırması gerektiğini varsayar.
Ayrıca, some_cron_job.txt dosyasının, yorumun söylediği gibi dosyanın sonunda bir satırsonu satırına sahip olduğundan emin olun. Aksi takdirde cron çalışmayacaktır.
Güncelleme:
Elastic Beanstalk örneklerinizi ölçeklendirdiğinde bu çözümle ilgili bir sorun vardır. Örneğin, cron işi çalışan bir örneğiniz olduğunu varsayalım. Trafikte artış elde edersiniz, böylece Elastic Beanstalk sizi iki örneğe kadar ölçeklendirir. Leader_only, iki örnek arasında yalnızca bir cron işi çalıştırmanızı sağlar. Trafiğiniz azalır ve Elastic Beanstalk sizi bir örneğe ölçeklendirir. Ancak, ikinci örneği sonlandırmak yerine Elastic Beanstalk, lider olan ilk örneği sonlandırır. Yalnızca sonlandırılan ilk örnekte çalıştıkları için şu anda çalışan herhangi bir cron işiniz yok. Aşağıdaki yorumlara bakın.
Güncelleme 2:
Bunu aşağıdaki yorumlardan açıkça belirtmek isteriz: AWS artık otomatik bulut sunucusu sonlandırmasına karşı korumaya sahiptir. Sadece lider örneğinizde etkinleştirin ve gitmeniz iyi olur. - Nicolás Arévalo 28 Eki 2016, 21:23