Melaksanakan tugas cron dalam bekas docker: panduan langkah demi langkah
P粉914731066
P粉914731066 2023-10-10 18:54:39
0
2
556

Saya cuba menjalankan cronjob di dalam bekas docker yang memanggil skrip shell.

Saya telah mencari dalam talian dan pada limpahan tindanan semalam tetapi saya tidak dapat mencari penyelesaian yang benar-benar berkesan.

Bagaimana saya boleh melakukan ini?

P粉914731066
P粉914731066

membalas semua(2)
P粉563831052

Jawapan yang diterima boleh berbahaya dalam persekitaran pengeluaran.

Apabila anda menggunakan CMD cron && tail -f /var/log/cron.log时,cron进程基本上会分叉以便在后台执行cron,主进程退出并让您在前台执行 tailf . Proses cron latar belakang mungkin berhenti atau gagal tanpa anda sedari, bekas anda masih akan berjalan dengan senyap dan alat orkestra anda tidak akan memulakannya semula.

Menggunakan ubah hala shell asas, anda mungkin mahu melakukan sesuatu seperti ini:

* * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2

CMD anda ialah: CMD ["cron", "-f"]

Tetapi: Bagaimana jika anda ingin menjalankan tugas sebagai pengguna bukan root .

P粉818125805

Anda boleh menyalin crontab ke dalam imej supaya bekas yang dilancarkan daripada imej itu menjalankan tugas.


Penting: Seperti dalam docker-cron isu 3: Gunakan cronLF untuk fail, bukan CRLF.


Lihat Menjalankan kerja cron dengan Docker" /github.com/julienboulay" rel="noreferrer">Julien Boulay dalam Ekito/docker-cronnya:

2>&1:

# must be ended with a new line "LF" (Unix) and not "CRLF" (Windows)
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
Jika anda tertanya-tanya apakah itu 2>&1, Ayman Hourieh terangkan

.

FROM ubuntu:latest
MAINTAINER docker@ekito.fr

RUN apt-get update && apt-get -y install cron

# Copy hello-cron file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron
 
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/hello-cron

# Apply cron job
RUN crontab /etc/cron.d/hello-cron
 
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
 
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
cronNamun: jika mati, bekas

terus berjalan

. (lihat Gaafar's komenapt-get dan Bagaimana untuk membuat apt-get
memasang kurang bising? apt-get -y install -qq --force-yes cron:

apt-get -y install -qq --force-yes cron

juga berfungsi) Seperti Nathan Lloyd mengulas

pada
:

Sebagai alternatif, pastikan tugas anda sendiri mengubah hala terus ke stdout/stderr dan bukannya fail log, seperti yang dinyatakan dalam hugoShaka's

jawapan

:

* * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2

Ganti baris Dockerfile terakhir dengan

CMD ["cron", "-f"]
Tetapi: Bagaimana jika anda ingin menjalankan tugas

sebagai pengguna bukan root

. cron -f,即cron“前台”)“docker ubuntu cron -f Lihat juga (tentang cron -f

, cron "frontend") "docker ubuntu cron -f
Not bekerja


Bina dan jalankannya:

sudo docker build --rm -t ekito/cron-example .
sudo docker run -t -i ekito/cron-example
Hello world
Hello world
Eric

menambah 🎜dalam komen🎜: 🎜

Lihat "docker CMD”末尾的 tail -f output > tidak ditunjukkan ".


Lihat "Running Cron in Docker" untuk maklumat lanjut (April 2021) daripada Jason Kulatunga sambil dia komen di bawah

Lihat imej Jason AnalogJ/docker-cron Berdasarkan:

  • Pemasangan fail Docker cronie/crond, bergantung pada pengedaran.

  • Titik masuk dimulakan /etc/environment dan kemudian memanggil

    cron -f -l 2
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!