Menjalankan Cronjob di dalam Panduan Pemula Docker

Menjalankan Cronjob di dalam Panduan Pemula Docker

Ketika datang ke penjadualan pekerjaan dan program yang secara automatik dijalankan pada selang waktu yang ditetapkan atau dapat dicetuskan oleh acara lain, anda mempunyai banyak pilihan. Anda boleh menggunakan utiliti tujuan umum seperti Cron, penjadual terbina dalam di MacOS atau Linux, atau alat khusus seperti AWS Lambda. Cron, walaupun tidak begitu kuat seperti AWS Lambda, adalah pilihan yang kukuh jika anda menggunakan bekas kerana ia direka untuk mengendalikan tugas latar belakang pada sistem Unix. Dengan Docker, bagaimanapun, perkara menjadi lebih rumit kerana anda tidak boleh melancarkan contoh kron baru dari terminal anda dan mengharapkan ia berfungsi.

Cara Dokkerisasi Pekerjaan Cron

Untuk menjalankan pekerjaan Cron di dalam bekas Docker, anda perlu menggunakan perkhidmatan Cron dan menjalankannya di latar depan di bekas Docker anda.

Inilah contoh bagaimana anda boleh menetapkan ini:

  1. Buat fail Cron:
  2. Buat fail yang mengandungi semua pekerjaan Cron yang akan dijalankan di bawah bekas Docker. Contohnya, mari kita hubungi fail ini 'Cron'.

    Cat Cron  

    Fail contoh kami kelihatan seperti:

    Cron * * * * * echo "Tarikh Semasa adalah 'Tarikh'">/Var/Log/Cron 

    Tambahkan semua pekerjaan Crontab dalam fail di atas yang perlu dijalankan di bawah bekas Docker.

  3. Buat Dockerfile
  4. Seterusnya, buat a 'Dockerfile' yang memasang perkhidmatan cron dan menyalin skrip ke dalam bekas. Di sini kami telah menyediakan 3 contoh Dockerfile menggunakan sistem operasi yang berbeza-2. Linux alpine sangat ringan dan mencukupi untuk menjalankan cronjobs. Tetapi jika anda perlu menyediakan persekitaran lain Linux Ubuntu, Apache, dan PHP. Pilih mana -mana templat dockerfile di bawah berdasarkan keperluan anda.

    • Dockerfile dengan Alpine Linux
    • Dari Alpine: 3 # Copy Cron File ke Container Copy Cron /etc /Cron.D/Cron # Beri kebenaran Jalankan CHMOD 0644/etc/Cron.D/Cron # Tambah Cron Job Run Crontab/etc/Cron.D/Cron # Link Cron Log File ke stdout Run ln -s/dev/stdout/var/log/cron # Run the Cron Service di latar depan cmd ["crond", "-l", "2", "-f "]
      12345678910111213141516Dari Alpine: 3 # Salin Fail Cron ke ContainerCopy Cron /ETC /Cron.D/Cron # Beri KebijaksanaanRun Chmod 0644/etc/Cron.D/Cron # Tambah Cron Jobrun Crontab/etc/Cron.D/Cron # Link Fail Log Cron ke Stdoutrun Ln -S/Dev/Stdout/Var/Log/Cron # Jalankan perkhidmatan Cron di foregroundcmd ["crond", "-l", "2", "-f"]

    • Dockerfile dengan Apache dan PHP
    • Dari PHP: 8.0 -APACHE # Pasang Cron Run Apt Update && \ Apt -y Pasang Cron # Copy Cron File ke Container Copy Cron /ETC /Cron.D/Cron # Beri kebenaran Jalankan CHMOD 0644/etc/Cron.D/Cron # Tambah Cron Job Run Crontab/etc/Cron.d/cron # pautan fail log cron ke stdout run ln -s/dev/stdout/var/log/cron # start cron service run sed -i 's/^exec/cron start \ n \ nexec/'/usr/ tempatan/bin/apache2-sikat
      1234567891011121314151617181920Dari PHP: 8.0 -APACHE # Pasang Cronrun Apt Update & \ Apt -y Pasang Cron # Copy Cron File ke ContainerCopy Cron /etc /Cron.D/Cron # Beri KebijaksanaanRun Chmod 0644/etc/Cron.D/Cron # Tambah Cron Jobrun Crontab/etc/Cron.d/cron # pautan fail log cron ke stdoutrun ln -s/dev/stdout/var/log/cron # start cron servicerun sed -i 's/^exec/perkhidmatan cron start \ n \ nexec/'/usr/local// bin/apache2-forground

    • Dockerfile dengan Ubuntu Linux
    • Dari Ubuntu: Terkini # Pasang Cron Deamon Run Apt Update && Apt Pasang -Y Cron # Copy Cron File ke Container Copy Cron /ETC /Cron.D/Cron # Beri kebenaran Jalankan CHMOD 0644/etc/Cron.D/Cron # Tambah Cron Job Run Crontab/etc/Cron.D/Cron # Link Fail Log Cron ke Stdout Run Ln -S/Dev/Stdout/Var/Log/Cron # Jalankan perkhidmatan Cron di latar depan Cmd ["cron", "-f"]
      12345678910111213141516171819Dari Ubuntu: Terkini # Pasang Cron Deamonrun Apt Update && Apt Pasang -Y Cron # Copy Cron File ke ContainerCopy Cron /etc /Cron.D/Cron # Beri kebenaran Jalankan CHMOD 0644/etc/Cron.D/Cron # Tambah Cron Jobrun Crontab/etc/Cron.D/Cron # Link Fail Log Cron ke Stdoutrun Ln -S/Dev/Stdout/Var/Log/Cron # Jalankan perkhidmatan Cron di foregroundcmd ["cron", "-f"]

  5. Bina dan lari bekas
  6. Anda mempunyai dua fail dalam direktori semasa anda. Satu adalah 'Cron' yang mengandungi Cronjobs dan yang kedua adalah Dockerfile yang mempunyai arahan membina untuk Docker. Jalankan arahan berikut untuk membina imej Docker menggunakan Dockerfile:

    Docker Build -t My_Cron .  

    Sebaik sahaja imej itu berjaya dibina, anda boleh melancarkan bekas menggunakan imej:

    docker run -d my_cron  

    Ini akan memulakan daemon cron di bawah bekas, yang akan semua pekerjaan yang dijadualkan ditakrifkan 'Cron' fail.

  7. Persediaan ujian
  8. Cronjobs harus berjaya dikonfigurasikan dengan bekas Docker. Seperti yang kita telah menghubungkan fail log cron (/var/log/cron) ke/dev/stdout. Tunjukkan semua balak yang dihasilkan oleh perkhidmatan Cron boleh menjadi benih 'Log Docker' perintah.

    Pertama, cari id atau nama bekas yang digunakan 'Docker PS' perintah.

    Docker PS  

    Kemudian periksa fail log bekas Docker.

    Docker log container_id 

    Di Cronjobs, saya telah mencetak tarikh semasa dan menulisnya ke log. Anda dapat melihat gambar di bawah yang menunjukkan tarikh semasa dalam log setiap minit.

    Menjalankan Cronjobs di Docker

    Ini bermaksud pekerjaan Cron berjalan dengan betul di bawah bekas Docker.

Mengakhiri

Pekerjaan Cron adalah cara yang berguna untuk mengautomasikan tugas harian di komputer anda, seperti membuat fail. Dengan Docker, walaupun, perkara menjadi lebih rumit kerana anda tidak boleh melancarkan contoh kron baru dari terminal anda dan mengharapkannya berjalan. Semasa menjalankan pekerjaan Cron dalam bekas Docker, anda akan menghadapi beberapa cabaran bergantung pada bagaimana dan di mana anda ingin menjalankan bekas. Selang pekerjaan Cron ditentukan dalam beberapa saat dan boleh berkisar dari satu minit hingga lebih dari 100 tahun. Kekerapan pekerjaan cron ditentukan dari segi bilangan kali kerja cron harus dilaksanakan setiap hari.

Ketika datang ke penjadualan pekerjaan dan program yang secara automatik dijalankan pada selang waktu yang ditetapkan atau dapat dicetuskan oleh acara lain, anda mempunyai banyak pilihan. Anda boleh menggunakan utiliti tujuan umum seperti Cron, penjadual terbina dalam di MacOS atau Linux, atau alat khusus seperti AWS Lambda. Cron, walaupun tidak begitu kuat seperti AWS Lambda, adalah pilihan yang kukuh jika anda menggunakan bekas kerana ia direka untuk mengendalikan tugas latar belakang pada sistem Unix. Dengan Docker, bagaimanapun, perkara menjadi lebih rumit kerana anda tidak boleh melancarkan contoh kron baru dari terminal anda dan mengharapkan ia berfungsi.