Bir kerelik bir işe paralel olarak bir cron ayarlama
Periyodik olarak çalışması gereken işle birlikte run.sh adlı bir komut dosyası oluşturun.
#!/bin/bash
timestamp=`date +%Y/%m/%d-%H:%M:%S`
echo "System path is $PATH at $timestamp"
Kaydet ve çık.
CMD yerine Giriş Noktası Kullan
liman işçiliği konteynerleştirmesi sırasında başlayacak birden fazla işiniz varsa, hepsini çalıştırmak için giriş noktası dosyasını kullanın.
Giriş noktası dosyası, bir liman işçisi çalıştırma komutu verildiğinde devreye giren bir komut dosyasıdır. Bu nedenle, çalıştırmak istediğimiz tüm adımlar bu komut dosyasına yerleştirilebilir.
Örneğin, çalışacak 2 işimiz var:
Bir kez çalıştır : echo “Docker konteyneri başlatıldı”
Periyodik işi çalıştır : run.sh
Entrypoint.sh oluştur
#!/bin/bash
# Start the run once job.
echo "Docker container has been started"
# Setup a cron schedule
echo "* * * * * /run.sh >> /var/log/cron.log 2>&1
# This extra line makes it a valid cron" > scheduler.txt
crontab scheduler.txt
cron -f
Dosyada ayarlanmış olan crontab'ı anlayalım
* * * * *
: Cron programı; iş her dakika yapılmalıdır. Gereksiniminize göre programı güncelleyebilirsiniz.
/run.sh
: Periyodik olarak çalıştırılacak olan komut dosyasının yolu
/var/log/cron.log
: Zamanlanan cron işinin çıktısını kaydetmek için dosya adı.
2>&1
: Hata günlükleri (varsa) yukarıda kullanılan çıktı dosyasına da yönlendirilecektir.
Not : Ek bir yeni satır eklemeyi unutmayın, çünkü geçerli bir cron yapar.
Scheduler.txt
: cron kurulumunun tamamı bir dosyaya yönlendirilecektir.
Cron'da Sistem / Kullanıcıya özgü ortam değişkenlerini kullanma
Gerçek cron işim, ortam değişkenleri docker run komutuna iletilirken argümanların çoğunu bekliyordu. Ancak bash ile, sisteme veya docker konteynerine ait ortam değişkenlerini kullanamadım.
Sonra bu, bu soruna bir çözüm olarak ortaya çıktı:
- Entrypoint.sh dosyasına aşağıdaki satırı ekleyin
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
- Cron kurulumunu güncelleyin ve
SHELL=/bin/bash
BASH_ENV=/container.env
Sonunda, entrypoint.sh
şöyle görünmelisin
#!/bin/bash
# Start the run once job.
echo "Docker container has been started"
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
# Setup a cron schedule
echo "SHELL=/bin/bash
BASH_ENV=/container.env
* * * * * /run.sh >> /var/log/cron.log 2>&1
# This extra line makes it a valid cron" > scheduler.txt
crontab scheduler.txt
cron -f
Son fakat en az değil: Dockerfile oluşturun
FROM ubuntu:16.04
MAINTAINER Himanshu Gupta
# Install cron
RUN apt-get update && apt-get install -y cron
# Add files
ADD run.sh /run.sh
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /run.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
Bu kadar. Docker görüntüsünü oluşturun ve çalıştırın!
RUN apt-get update && apt-get install cron