Rumah > Soal Jawab > teks badan
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粉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 .
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 cron
LF 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
.
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
cron
Namun: jika mati, bekas
.
(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
balas0