docker - tidak ada crontab untuk root

Dockerfile saya tampaknya dibangun dengan benar (ini memberi tahu saya demikian). Ketika saya menjalankan wadah, saya mendapatkan pesan kesalahan di bawah ini. Saya telah mencoba menjalankan perintah (CMD) dengan dan tanpa direktori layanan.

crontab.sh pada dasarnya menulis jadwal cron ke file teks (cron.jobs) dan kemudian mengimpor file teks ke crontab.

Dockerfile:

FROM node:0.10MAINTAINER TomVOLUME /var/log/RUN mkdir /pulseADD . /pulseWORKDIR /pulseRUN apt-get update && apt-get install -y cronADD *.sh /pulse/RUN chmod 750 /pulse/crontab.sh && chmod 750 /pulse/RUN chmod 644 /etc/crontabCMD cron -fCMD touch /var/log/cron.log && sh /pulse/crontab.sh && tail -f /var/log/cron.logCMD cron /pulse/cron.jobsCMD crontab -l

edited to add crontab.sh

crontab.sh (beberapa crons telah dihapus):

#!/bin/bashcat <<- 'EOF' > cron.jobs0 * * * * node /pulse/scripts/awsPulseTest.js > /tmp/awsPulseTest.log 2>&1EOFcrontab cron.jobs

Kesalahan:

no crontab for root

Catatan samping:

  • Pulsa adalah nama layanan.
  • Versi node sudah tua karena layanan, ini akan ditingkatkan.
  • Layanan ini pada dasarnya untuk pekerjaan cron di node

Ini masalah dengan dockerfile (bukan perintah dalam file).Hanya satu CMD dijalankan (yang terakhir) - Lihat https://docs.docker.com/engine/reference/builder/#cmd

Hanya ada satu instruksi CMD dalam Dockerfile. Jika Anda mencantumkan lebih dari satu CMD maka hanya CMD terakhir yang akan berlaku.

Seperti yang telah dijelaskan oleh jawaban lainnya, hanya satu CMD akan dijalankan per Dockerfile dan perintah yang ingin Anda jalankan salah.

Tetapi ada masalah yang lebih mendesak dengan pengaturan Anda IMO - wadah Docker Biasanya tidak dirancang untuk bekerja dengan cara ini. Yang harus Anda lakukan adalah menjalankan layanan cron dari host (atau orkestra anda) sebagai proses satu kali (mungkin menggunakan sesuatu seperti docker run atau docker-compose run, atau, jika karena alasan tertentu Anda tidak ingin memulai wadah terpisah untuk ini, saya kira Anda bisa menggunakannya docker exec).

Ini hanya pandangan saya tentang bagaimana wadah harus digunakan, jadi jelas Anda harus mengambilnya dengan sebutir garam.

Jika Anda Menambahkan ini ke /etc/crontab, ini tidak akan muncul di crontab pribadi root, karena ini hanya berisi crontab khusus pengguna yang diedit dengan crontab -e, bukan yang seluruh sistem di /etc.


Lebih detail:

Dugaan saya adalah bahwa /pulse/crontab.sh (yang tidak Anda tunjukkan, mengapa?) menambahkan baris crontab yang relevan ke file crontab lebar sistem /etc/crontab. Anda kemudian menjalankan perintah crontab -l, tetapi ini hanya menunjukkan kesalahan karena mencantumkan roots pribadi crontab saja (yang kebetulan kosong), bukan yang seluruh sistem di /etc/crontab. Ini semua normal dan diharapkan. Untuk menampilkan baris yang ditambahkan skrip Anda, Anda akan mengganti CMD crontab -l dengan CMD cat /etc/crontab.

Semua ini tidak ada hubungannya dengan perintah dockerfile seperti ADD, RUN atau CMD, ini hanya hal-hal dasar Linux.

Kombinasi dari cron - docker - no crontab for root - Server Fault dan cron - docker - no crontab for root - Server Fault membantu menyelesaikan ini.