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.
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
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:
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: