ডকার - মূলের জন্য কোনও ক্রন্টব নয়


10

আমার ডকফাইফিল সঠিকভাবে নির্মাণ করতে উপস্থিত হয়েছে (এটি আমাকে এটি বলে)। আমি যখন ধারকটি চালনা করি তখন আমি নীচের ত্রুটি বার্তাটি পাই। আমি CMDসার্ভিসের ডিরেক্টরিটি সহ এবং ছাড়াও কমান্ডগুলি ( ) চালানোর চেষ্টা করেছি ।

crontab.shমূলত একটি পাঠ্য ফাইলে ( cron.jobs) ক্রোন শিডিউল লিখে এবং তারপর পাঠ্য ফাইলটি ক্রন্টবায় আমদানি করে।

Dockerfile:

FROM node:0.10
MAINTAINER Tom

VOLUME /var/log/

RUN mkdir /pulse
ADD . /pulse
WORKDIR /pulse

RUN apt-get update && apt-get install -y cron

ADD *.sh /pulse/
RUN chmod 750 /pulse/crontab.sh && chmod 750 /pulse/

RUN chmod 644 /etc/crontab

CMD cron -f
CMD touch /var/log/cron.log && sh /pulse/crontab.sh && tail -f /var/log/cron.log
CMD cron /pulse/cron.jobs
CMD crontab -l

edited to add crontab.sh

crontab.sh (কিছু ক্রোন সরানো হয়েছে):

#!/bin/bash

cat <<- 'EOF' > cron.jobs

0 * * * * node /pulse/scripts/awsPulseTest.js > /tmp/awsPulseTest.log 2>&1

EOF

crontab cron.jobs

ত্রুটি:

no crontab for root

পার্শ্ব নোট:

  • নাড়ি সেবার নাম।
  • পরিষেবাটির কারণে নোডের সংস্করণটি পুরানো, এটি আপগ্রেড হবে।
  • পরিষেবাটি নোডে ক্রোন কাজের জন্য মূলত

উত্তর:


11

এটি ডকফাইফাইলের সাথে সমস্যা (ফাইলের কমান্ডের চেয়ে)। কেবল একটি CMDচালিত (সর্বশেষ) - https://docs.docker.com/engine/references/builder/#cmd দেখুন

ডকফাইফিলে কেবল একটি সিএমডি নির্দেশ থাকতে পারে। আপনি যদি একাধিক সিএমডি তালিকাবদ্ধ করেন তবে কেবল সর্বশেষ সিএমডি কার্যকর হবে।


আহ, এবং অন্য যে সমস্ত কিছুর ওপরে রয়েছে :) ওপিকে: এটি আমার ব্যাখ্যাটিকে অকার্যকর করে না এবং আপনাকে অবশ্যই এটির CMDসাথে প্রতিস্থাপন করতে হবে RUN
সোভেন

2
আমি মনে করি এটিকে একটি সমস্যা বলা সামান্য বন্ধ। এই আচরণ নকশা দ্বারা হয়। ধারকগুলি মিনি-ওএস নয়। তারা প্রয়োগকেন্দ্রিক।
জিমি জেমস

একমত। আমার উদ্দেশ্যটি পরিষ্কার করা ছিল যে ক্রোন সম্পর্কিত কোনও বিবরণ না করে ওপি-র সমস্যাটি তাদের ডকার কনফিগারেশনে রয়েছে।
পল হালডান

এটি কোনও ডক ইস্যু নয় । এটি নকশা দ্বারা।
অ্যান্ড্রু সাভিনিখ

5

অন্যান্য উত্তর যেমন ইতিমধ্যে ব্যাখ্যা করেছে, CMDডকফাইফিল প্রতি কেবল একটি চালানো হবে এবং আপনি যে আদেশটি চালাতে চান তা ভুল।

তবে আপনার সেটআপ আইএমওতে আরও চাপের সমস্যা রয়েছে - ডক পাত্রে সাধারণত এইভাবে কাজ করার জন্য নকশা করা হয় না। পরিবর্তে আপনার যা করা উচিত তা হ'ল হোস্ট (বা আপনার অর্কেস্টেটর) থেকে ওয়ান-অফ প্রক্রিয়া হিসাবে চালাচ্ছে (সম্ভবত এর মতো কিছু ব্যবহার করছে docker runবা docker-compose run, অথবা যদি কোনও কারণে আপনি পৃথক ধারক শুরু করতে চান না, আমি অনুমান করুন আপনি ব্যবহার করতে পারেন docker exec)।

পাত্রে কীভাবে ব্যবহার করা উচিত সে সম্পর্কে এটি কেবল আমার দৃষ্টিভঙ্গি, সুতরাং স্পষ্টতই আপনার এটি লবণের দানা দিয়ে নেওয়া উচিত।


2
ক্রোনটির সাথে আমার কেবল একটি পরিচিতি রয়েছে তবে আমি মনে করি এটি বোধগম্য করার জন্য সিএমডির ক্রন্ড চালানো দরকার। অন্যথায়, crontab কমান্ড শেষ হওয়ার পরে ধারকটি প্রস্থান করবে।
জিমি জেমস 22'17

@ জিমি জেমস আপনি যা বলছেন তা সঠিক, তবে আমি যেমন উপরে ব্যাখ্যা করেছি, এর চেয়ে ভাল সমাধান হ'ল এই আদেশগুলি বাইরের ক্রোন থেকে এক-অফ হিসাবে চালানো docker run। আরও ধারক-ওয়। :)
আর্তুর সিজিলসকি

আপনি সঠিক হতে পারে। প্রশ্নটি আকর্ষণীয় কারণ এটি আপনার ধারক কমান্ড হিসাবে ক্রন্ড চালানোর কোনও অর্থ বোধ করে কিনা তা পরিষ্কার নয়। এটি কার্যকর হতে পারে তবে পাত্রে এটি বিশ্রী বলে মনে হচ্ছে।
জিমি জেমস

3

আপনার কাছে এই যুক্ত করে থাকেন /etc/crontab, এই, রুট ব্যক্তিগত নিম্নলিখিতরূপে crontab পরিবর্তন দেখা যাবে না এই শুধুমাত্র ব্যবহারকারীর-নির্দিষ্ট নিম্নলিখিতরূপে crontab পরিবর্তন সঙ্গে সম্পাদিত রয়েছে crontab -e, নেই সিস্টেম-ব্যাপী এক /etc


আরো বিস্তারিত:

আমার অনুমানটি হ'ল /pulse/crontab.sh(যা আপনি দেখান না, কেন?) সিস্টেমের প্রশস্ত ক্রন্টব ফাইলটিতে প্রাসঙ্গিক ক্রন্টব লাইন যুক্ত করে /etc/crontab। আপনি পরে কমান্ড প্রয়োগ crontab -l, কিন্তু কারণ এটি তালিকা এই শুধুমাত্র একটি ত্রুটি দেখায় rootগুলি ব্যক্তিগত নিম্নলিখিতরূপে crontab পরিবর্তন শুধুমাত্র (যা খালি হতে হবে), মধ্যে সিস্টেম-ব্যাপী এক /etc/crontab। এটি পুরোপুরি স্বাভাবিক এবং প্রত্যাশিত। আপনার স্ক্রিপ্টটি যুক্ত রেখাটি দেখাতে, আপনি এটি প্রতিস্থাপন CMD crontab -lকরবেন CMD cat /etc/crontab

এই সমস্ত কিছুই যেমন কোনও ডকফেরফিল কমান্ডের সাথে কিছুই করার নেই ADD, RUNবা CMDএটি কেবলমাত্র বেসিক লিনাক্স স্টাফ।


আমি মনে করি আমি এটি বুঝতে পেরেছি। আমার বিল্ড সেটিংস ব্যবহারকারীর মধ্যে রয়েছে তবে আমার রান সেটিংসটি রুটের ক্রন্টব থেকে চালানোর চেষ্টা করছে? এটি বোধগম্য হয়, আমি এটির আশপাশে কাজ করার চেষ্টা করব। আমি অনুমান করছি আপনি বোঝাতে চাইছেন না: ADD . /etc/crontabযেমনটি কাজ করে না।
টমফर्थ

@ টমফर्थ: এটি খুব একটা বোঝায় না। আরও বিশদ জন্য দয়া করে আমার সম্পাদনা পড়ুন।
সোভেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.