मैंने डॉकरफ़ाइल से एक डॉकर छवि बनाई है, और मैं इस छवि के आधार पर एक कंटेनर चल रहा है, जब मैं समय-समय पर एक क्रोनबॉज निष्पादित करना चाहता हूं। मेरे Dockerfile इस (प्रासंगिक भागों) है:डॉकर कंटेनर के अंदर, cronjobs को निष्पादित नहीं किया जा रहा है
FROM l3iggs/archlinux:latest
COPY source /srv/visitor
WORKDIR /srv/visitor
RUN pacman -Syyu --needed --noconfirm \
&& pacman -S --needed --noconfirm make gcc cronie python2 nodejs phantomjs \
&& printf "*/2 * * * * node /srv/visitor/visitor.js \n" >> cronJobs \
&& crontab cronJobs \
&& rm cronJobs \
&& npm install -g node-gyp \
&& PYTHON=/usr/sbin/python2 && export PYTHON \
&& npm install
EXPOSE 80
CMD ["/bin/sh", "-c"]
छवि के निर्माण के बाद मैं एक कंटेनर चलाने के लिए और सत्यापित करें कि वास्तव में cronjob जोड़ा गया है:
crontab -l
*/2 * * * * node /srv/visitor/visitor.js
अब, समस्या यह है कि है cronjob कभी निष्पादित नहीं किया जाता है। मैंने निश्चित रूप से परीक्षण किया है कि "node /srv/visitor/visitor.js" कंसोल से मैन्युअल रूप से चलाते समय ठीक से निष्पादित करता है।
कोई विचार?
क्रॉन को एक डिमन की आवश्यकता होती है। आधे प्रक्रिया नौकरी बना रही है, जो क्रॉन के फाइल स्टोरेज में रहती है। क्रॉन के लिए दूसरा आधा नौकरियां निष्पादित कर रहा है। आप यहां देख सकते हैं: http://stackoverflow.com/questions/20545554/how-do-i-start-cron-on-docker-ubuntu-base। यदि आप मेजबान के क्रॉन डिमन को अपने क्रोनवर्क करने के लिए चाहते हैं तो आपको कंटेनर शुरू करते समय मेजबान क्रॉन निर्देशिका को माउंट करने की आवश्यकता होगी? हालांकि यह अच्छा नहीं लगता है! – Greg
ग्रेग, आप इसे उत्तर के रूप में क्यों नहीं जोड़ते? मैं वही कहने वाला था। यह भी ध्यान दें कि फ्यूजन छवि क्रॉन चलने के साथ आता है। –
@ ग्रेग मैं अब समझ सकता हूं कि आप क्या कह रहे हैं। बात यह है कि, मैं या तो मेजबान की क्रॉन निर्देशिका को माउंट नहीं करना चाहता, या कंटेनर के अंदर systemd चला सकता हूं (कुछ अन्य सुझावों के अनुसार)। मुझे लगता है कि इन दोनों विधियों में अनावश्यक रूप से अन्यथा स्वच्छ प्रणाली "प्रदूषित" होगी। मेरे विकल्प क्या हैं? क्या मैं सिस्टम के बिना क्रोनी चला सकता हूं? या, क्या कोई विकल्प है? – dsljanus