cari

Rumah  >  Soal Jawab  >  teks badan

Melaksanakan tugas cron dalam bekas docker: panduan langkah demi langkah

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粉914731066P粉914731066430 hari yang lalu586

membalas semua(2)saya akan balas

  • P粉563831052

    P粉5638310522023-10-11 17:56:26

    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 .

    balas
    0
  • P粉818125805

    P粉8181258052023-10-11 16:39:03

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


    Penting: Seperti dalam docker-cron isu 3< 中所述< /a>: 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 CMDtail -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

    balas
    0
  • Batalbalas