डॉकर क्रॉन काम नहीं कर रहा है

मैं एक डॉकर छवि बनाने की कोशिश कर रहा हूं जिसमें एक क्रॉन होगा । एक क्रॉन जो डॉकर फ़ाइल सिस्टम के विशेष स्थान से फ़ाइलों को हटा देगा । नीचे है मेरी Dockerfile

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"]

सब कुछ सफल है । मेरा क्रॉन भी कंटेनर में सेट है

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

हालाँकि यह उन फ़ाइलों को नहीं चला रहा है और हटा रहा है जो अंदर हैं /opt/ फ़ोल्डर। क्या कोई मुझे बता सकता है कि कॉन्फ़िगरेशन में क्या गलत है ।

कुछ इस तरह की कोशिश करो,

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

फ़ाइल क्रोंटैब बनाएं और इस तरह एक प्रविष्टि जोड़ें

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

आशा है कि यह आपकी मदद करेगा!!!

अपने crontab वाक्य रचना गलत है ।

दो स्थान हैं जहां आप क्रॉन फाइलें रख सकते हैं:

  • उपयोगकर्ता की अपनी क्रोंटैब फ़ाइल में, आमतौर पर नीचे /var/spool/cron/USERNAME. यदि आप कमांड का उपयोग करते हैं तो यह वह जगह है जहां चीजें स्वचालित रूप से रखी जाती हैं crontab.
  • में /etc/cron.d

यदि आप इसे अंदर रखते हैं /etc/cron.d, फ़ाइल में उस उपयोगकर्ता का नाम होना चाहिए जिसे आप इसे चला रहे हैं, क्योंकि फ़ाइल और उपयोगकर्ता के बीच अन्यथा कोई संबंध नहीं है । लेकिन अगर आप उपयोग करते हैं crontab कमांड, क्रॉन विनिर्देश आपके उपयोगकर्ता से संबंधित क्रोंटैब में रखा जाएगा (या उस उपयोगकर्ता को जिसे आप निर्दिष्ट करते समय निर्दिष्ट करते हैं crontab), इसलिए आपको उपयोगकर्ता नाम शामिल नहीं करना है ।

तो इसे ठीक करने के लिए आप दो चीजों में से एक कर सकते हैं:

  • आप उस स्ट्रिंग से उपयोगकर्ता नाम को हटा सकते हैं जिसे आप क्रोंटैब कमांड में पास कर रहे हैं, ताकि यह इस तरह दिखे:

    रन (crontab -l -u जड़; इको "* * * * * rm -आरएफ /opt/*") | crontab
  • आप के तहत एक फ़ाइल में क्रोंटैब प्रविष्टि रख सकते हैं /etc/cron.d इसके बजाय, इस तरह:

    >रन (इको " * * * * * रूट आरएम-आरएफ / ऑप्ट / *" / आदि / क्रॉन।डी/clearopt)

मुझे उसी संदर्भ में एक ही मुद्दा मिला है । मेरा सुझाव कंटेनर के स्टार्टअप पर जो कुछ भी आप चाहते हैं उसे करने के लिए एक बैश स्क्रिप्ट बनाना है ।
और फिर जेएसओएन सरणी सिंटैक्स का उपयोग करके इसे चलाने के लिए डॉकरफाइल में सीएमडी सेट करें ।

मेरे पास एक फाइल है start.sh कुछ सामान करने के लिए और मैं उपयोग करता हूं & इसे पृष्ठभूमि में चलाने के लिए और फिर मैं क्रॉन और अपाचे सर्वर को शुरू करने के लिए क्रॉन और अपाचे 2-अग्रदूत चलाता हूं ।

यह मेरे डॉकरफाइल के अंत में अंतिम कमांड है:

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

Learn about when to use ENTRYPOINT vs CMD.