एक बार की नौकरी के समानांतर एक क्रोन सेटअप करें
स्क्रिप्ट फ़ाइल बनाएं, run.sh कहें, उस नौकरी के साथ जो समय-समय पर चलने वाली है।
#!/bin/bash
timestamp=`date +%Y/%m/%d-%H:%M:%S`
echo "System path is $PATH at $timestamp"
सुरषित और बहार।
CMD के बजाय Entrypoint का उपयोग करें
च क्या आपके पास डॉकटर कंटेनरीकरण के दौरान किक करने के लिए कई कार्य हैं, इन सभी को चलाने के लिए एंट्रीपॉइंट फ़ाइल का उपयोग करें।
एंट्रीपॉइंट फ़ाइल एक स्क्रिप्ट फ़ाइल है जो एक docker रन कमांड जारी होने पर कार्रवाई में आती है। तो, हम जो भी स्टेप्स चलाना चाहते हैं वह सभी इस स्क्रिप्ट फ़ाइल में डाल सकते हैं।
उदाहरण के लिए, हमारे पास चलाने के लिए 2 काम हैं:
एक बार नौकरी चलाएं : गूंज "डॉकटर कंटेनर शुरू किया गया है"
रन आवधिक नौकरी : run.sh
प्रविष्टि लिखें
#!/bin/bash
# Start the run once job.
echo "Docker container has been started"
# Setup a cron schedule
echo "* * * * * /run.sh >> /var/log/cron.log 2>&1
# This extra line makes it a valid cron" > scheduler.txt
crontab scheduler.txt
cron -f
आइए समझते हैं कि फ़ाइल में स्थापित किए गए क्रैस्टैब को क्या करना है
* * * * *
: क्रोन अनुसूची; नौकरी को हर मिनट चलना चाहिए। आप अपनी आवश्यकता के आधार पर शेड्यूल को अपडेट कर सकते हैं।
/run.sh
: स्क्रिप्ट फ़ाइल का पथ जो समय-समय पर चलाया जाना है
/var/log/cron.log
: अनुसूचित क्रोन नौकरी के उत्पादन को बचाने के लिए फ़ाइल नाम।
2>&1
: त्रुटि लॉग (यदि कोई है) को भी उसी आउटपुट फ़ाइल पर पुनर्निर्देशित किया जाएगा जो ऊपर उपयोग की गई है।
नोट : एक अतिरिक्त नई लाइन जोड़ना न भूलें, क्योंकि यह इसे एक वैध क्रोन बनाती है।
Scheduler.txt
: पूरा क्रोन सेटअप एक फ़ाइल पर पुनर्निर्देशित किया जाएगा।
क्रोन में सिस्टम / उपयोगकर्ता विशिष्ट पर्यावरण चर का उपयोग करना
मेरी वास्तविक क्रोन नौकरी अधिकांश तर्कों की अपेक्षा कर रही थी क्योंकि पर्यावरण चर, डॉक रन कमांड को पारित कर दिया गया था। लेकिन, बैश के साथ, मैं किसी भी पर्यावरण चर का उपयोग करने में सक्षम नहीं था जो सिस्टम या डॉकटर कंटेनर से संबंधित है।
फिर, यह इस समस्या के लिए एक बदलाव के रूप में आया:
- एंट्रीपॉइंट.sh में निम्न लाइन जोड़ें
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
- क्रोन सेटअप अपडेट करें और निर्दिष्ट करें-
SHELL=/bin/bash
BASH_ENV=/container.env
अंत में, आपकी entrypoint.sh
तरह दिखना चाहिए
#!/bin/bash
# Start the run once job.
echo "Docker container has been started"
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
# Setup a cron schedule
echo "SHELL=/bin/bash
BASH_ENV=/container.env
* * * * * /run.sh >> /var/log/cron.log 2>&1
# This extra line makes it a valid cron" > scheduler.txt
crontab scheduler.txt
cron -f
अंतिम लेकिन कम से कम नहीं: एक डॉकरीफाइल बनाएं
FROM ubuntu:16.04
MAINTAINER Himanshu Gupta
# Install cron
RUN apt-get update && apt-get install -y cron
# Add files
ADD run.sh /run.sh
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /run.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
बस। डॉकर छवि बनाएं और चलाएं!
RUN apt-get update && apt-get install cron