Atur cron secara paralel ke pekerjaan satu kali
Buat file skrip, katakan run.sh, dengan pekerjaan yang seharusnya dijalankan secara berkala.
#!/bin/bash
timestamp=`date +%Y/%m/%d-%H:%M:%S`
echo "System path is $PATH at $timestamp"
Simpan dan keluar.
Gunakan Entrypoint alih-alih CMD
Jika Anda memiliki banyak pekerjaan untuk ditendang selama kontainerisasi buruh pelabuhan, gunakan file entrypoint untuk menjalankan semuanya.
File Entrypoint adalah file skrip yang mulai beraksi ketika perintah run docker dikeluarkan. Jadi, semua langkah yang ingin kita jalankan dapat dimasukkan ke dalam file skrip ini.
Misalnya, kami memiliki 2 pekerjaan yang harus dijalankan:
Jalankan sekali pekerjaan : echo "Docker container telah dimulai"
Jalankan pekerjaan berkala : run.sh
Buat entrypoint.sh
#!/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
Mari kita memahami crontab yang telah diatur dalam file
* * * * *
: Jadwal Cron; pekerjaan harus dijalankan setiap menit. Anda dapat memperbarui jadwal berdasarkan kebutuhan Anda.
/run.sh
: Jalur ke file skrip yang akan dijalankan secara berkala
/var/log/cron.log
: Nama file untuk menyimpan output dari pekerjaan cron yang dijadwalkan.
2>&1
: Log kesalahan (jika ada) juga akan diarahkan ke file output yang sama yang digunakan di atas.
Catatan : Jangan lupa untuk menambahkan baris baru, karena menjadikannya cron yang valid.
Scheduler.txt
: pengaturan cron lengkap akan dialihkan ke file.
Menggunakan variabel lingkungan Sistem / Pengguna khusus dalam cron
Pekerjaan cron saya yang sebenarnya mengharapkan sebagian besar argumen sebagai variabel lingkungan dilewatkan ke perintah run docker. Tetapi, dengan bash, saya tidak dapat menggunakan variabel lingkungan apa pun yang termasuk dalam sistem atau wadah buruh pelabuhan.
Kemudian, ini muncul sebagai solusi untuk masalah ini:
- Tambahkan baris berikut di entrypoint.sh
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
- Perbarui pengaturan cron dan tentukan-
SHELL=/bin/bash
BASH_ENV=/container.env
Akhirnya, Anda entrypoint.sh
akan terlihat seperti
#!/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
Terakhir tetapi tidak sedikit: Buat Dockerfile
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
Itu dia. Bangun dan Jalankan gambar Docker!
RUN apt-get update && apt-get install cron