docker cron tidak berfungsi

Saya mencoba membangun gambar buruh pelabuhan yang akan memiliki cron. Sebuah cron yang akan menghapus file dari lokasi tertentu dari sistem file docker. Di bawah ini adalah Dockerfile saya

FROM ubuntu:latestMAINTAINER docker@ekito.frRUN apt-get update && apt-get -y install cron# Copy testfiles folder to docker container.COPY ./testfiles /opt/# Create the log file to be able to run tailRUN touch /var/log/cron.logRUN (crontab -l -u root; echo "* * * * * root rm -rf /opt/*") | crontab# Run the command on container startupCMD cronENTRYPOINT ["/bin/sh", "-c", "/bin/bash"]

Semuanya sukses. cron saya juga diatur dalam wadah

roadrunner:test shailesh$ docker run -it crontest /bin/bashroot@ac31f5acc49f:/# lsbin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varroot@ac31f5acc49f:/# crontab -l* * * * * root rm -rf /opt/*root@ac31f5acc49f:/# cd /opt/root@ac31f5acc49f:/opt# ls  file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19  file2  file20  file21  file22  file23  file24  file25  file3  file4  file5  file6  file7  file8  file9

Namun itu tidak berjalan dan menghapus file yang ada di /opt/ folder. Dapatkah seseorang mengatakan padaku apa yang salah dalam konfigurasi.

Cobalah beberapa hal seperti ini,

FROM ubuntu:latestMAINTAINER docker@ekito.frRUN apt-get update && apt-get -y install cron# Add crontab file in the cron directoryADD crontab /etc/cron.d/hello-cron# Give execution rights on the cron jobRUN chmod 0644 /etc/cron.d/hello-cron# Apply cron jobRUN crontab /etc/cron.d/hello-cron# Create the log file to be able to run tailRUN touch /var/log/cron.log# Run the command on container startupCMD cron && tail -f /var/log/cron.log

buat file crontab dan tambahkan entri seperti ini

* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1

Semoga ini akan membantu Anda!!!

Sintaks crontab Anda salah.

Ada dua tempat di mana Anda dapat menempatkan file cron:

  • dalam file crontab pengguna sendiri, biasanya di bawah /var/spool/cron/USERNAME. Di sinilah hal-hal ditempatkan secara otomatis jika Anda menggunakan perintah crontab.
  • di /etc/cron.d

Jika Anda menempatkannya di /etc/cron.d, file harus berisi nama pengguna yang anda jalankan, karena tidak ada koneksi antara file dan pengguna. Tetapi jika Anda menggunakan crontab perintah, SPESIFIKASI cron akan ditempatkan di crontab milik pengguna Anda (atau pengguna yang anda tentukan saat menjalankan crontab), jadi Anda tidak perlu menyertakan nama pengguna.

Jadi untuk memperbaiki ini Anda dapat melakukan salah satu dari dua hal:

  • Anda dapat menghapus nama pengguna dari string yang Anda berikan ke perintah crontab, sehingga terlihat seperti ini:

    Jalankan (akar crontab-l-u; gema " * * * * * rm-rf / opt/*") / crontab
  • Anda dapat menempatkan entri crontab dalam file di bawah /etc/cron.d sebaliknya, seperti ini:

    >Jalankan (gema "* * * * * akar rm-rf / opt/* " / etc / cron.d / clearopt)

Saya memiliki masalah yang sama dalam konteks yang sama. Tip saya adalah membuat skrip bash untuk melakukan apa pun yang anda inginkan di startup wadah.
dan kemudian atur CMD di Dockerfile untuk menjalankannya menggunakan sintaks array JSON.

Saya memiliki file start.sh untuk melakukan beberapa hal dan saya menggunakan & untuk menjalankannya di latar belakang dan kemudian saya menjalankan cron & amp; & amp; apache2-foregroung untuk memulai cron dan server apache.

Ini adalah perintah terakhir di akhir Dockerfile saya:

CMD ./start.sh > web/startup.log & cron && apache2-foreground

Learn about when to use ENTRYPOINT vs CMD.