প্রশ্ন কেন crontab স্ক্রিপ্ট কাজ করছে না?


প্রায়শই, crontab স্ক্রিপ্ট সময়সূচী বা প্রত্যাশিত হিসাবে মৃত্যুদন্ড কার্যকর করা হয় না। এর জন্য অসংখ্য কারণ রয়েছে:

  1. ভুল crontab নোটেশন
  2. অনুমতি সমস্যা
  3. পরিবেশ ভেরিয়েবল

এই সম্প্রদায় উইকি লক্ষ্য শীর্ষ জন্য একত্রিত করা হয় crontab স্ক্রিপ্ট প্রত্যাশিত হিসাবে মৃত্যুদন্ড কার্যকর করা হচ্ছে না। একটি পৃথক উত্তর প্রতিটি কারণ লিখুন।

উত্তর প্রতি এক কারণ অন্তর্ভুক্ত করুন - কেন এটি কার্যকর করা হয় না সে সম্পর্কে বিশদ - এবং সেই কারণের জন্য (ইএস) ঠিক করুন।

শুধুমাত্র ক্রন-নির্দিষ্ট সমস্যা লিখুন, যেমন। শেল থেকে প্রত্যাশিত কমান্ড যা ক্রন দ্বারা ভুলভাবে চালানো হয়।


455


উত্স


আপনি বন্ধ করা আবশ্যক crontab -e ক্রন প্রভাবিত করার জন্য। উদাহরণস্বরূপ ভিম ব্যবহার করে আমি ফাইল সম্পাদনা এবং ব্যবহার :w এটি লিখতে কিন্তু কাজটি বন্ধ না হওয়া পর্যন্ত কাজটি ক্রোকে যোগ করা হয় না। কাজেই আমি চাকরিটা দেখি না যতক্ষণ না :q এছাড়াও। - DutGRIFF
আমি মনে করি cron ডিবাগ করার সেরা উপায় syslog চেক এবং সমস্যা খুঁজে বের করতে হয়। - Suneel Kumar
আমার ক্ষেত্রে - ইমেলটি আমার স্প্যাম ফোল্ডারে যাচ্ছিল, তাই ..... ডিবাগিংয়ের জন্য ঘন্টা ব্যয় করার আগে এটি চেক করুন: D - almaruf
বিদ্যুৎ অপচয় - Josef Klimuk


উত্তর:


বিভিন্ন পরিবেশ

ক্রন আপনার কাজ পরিবেশগত ভেরিয়েবল একটি সংক্ষিপ্ত সেট পাস। পার্থক্য দেখতে, এই মত একটি ডামি কাজ যোগ করুন:

* * * * * env> /tmp/env.output

অপেক্ষা করা /tmp/env.output তৈরি করা, তারপর আবার কাজ মুছে ফেলুন। এখন বিষয়বস্তু তুলনা করুন /tmp/env.output আউটপুট সঙ্গে env আপনার নিয়মিত টার্মিনালে চালান।

এখানে একটি সাধারণ "gotcha" হয় PATH পরিবেশ পরিবর্তনশীল ভিন্ন হচ্ছে। হয়তো আপনার ক্রন স্ক্রিপ্ট কমান্ড ব্যবহার করে somecommand পাওয়া /opt/someApp/bin, যা আপনি যোগ করেছেন PATH মধ্যে /etc/environment? ক্রন উপেক্ষা করে PATH যে ফাইল থেকে, তাই রানিং somecommand ক্রন সঙ্গে চালানোর সময় আপনার স্ক্রিপ্ট থেকে ব্যর্থ হবে, কিন্তু একটি টার্মিনালে রান যখন কাজ। এটা যে ভেরিয়েবল নোট মূল্য /etc/environment cron কাজ পাস করা হবে, শুধু ভেরিয়েবল cron বিশেষভাবে নিজেই সেট, যেমন না PATH

যে কাছাকাছি পেতে, শুধু আপনার নিজের সেট PATH স্ক্রিপ্ট শীর্ষে পরিবর্তনশীল। উদাহরণস্বরূপ

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# rest of script follows

কিছু শুধু পরিবর্তে সমস্ত কমান্ডের পরম পাথ ব্যবহার করতে পছন্দ করে। আমি যে বিরুদ্ধে সুপারিশ। আপনি যদি আপনার স্ক্রিপ্টটিকে কোনও পৃথক সিস্টেমে চালাতে চান তবে বিবেচনা করুন, এবং সেই সিস্টেমে কমান্ডটি রয়েছে /opt/someAppv2.2/bin পরিবর্তে. আপনি পুরো স্ক্রিপ্ট প্রতিস্থাপন মাধ্যমে যেতে হবে /opt/someApp/bin সঙ্গে /opt/someAppv2.2/bin পরিবর্তে শুধু স্ক্রিপ্টের প্রথম লাইনের উপর একটি ছোট সম্পাদনা করছেন।

আপনি crontab ফাইলের মধ্যে PATH পরিবর্তনশীল সেট করতে পারেন, যা সমস্ত ক্রন কাজগুলিতে প্রযোজ্য হবে। উদাহরণস্বরূপ

PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

15 1 * * * backupscript --incremental /home /root

431



আমি মনে করি আমি শুধু এই জন্য, এবং শেষ পর্যন্ত newline ... ডবল whammy। - WernerCD
+1 জন্য env, আমি যে কমান্ড সম্পর্কে সম্পূর্ণ ভুলে গিয়েছিলাম এবং চিন্তা করতাম প্যাথ কাজ করছে। এটা আসলে আমার ক্ষেত্রে sliiiightly বিভিন্ন ছিল। - Izkata
@ pbr যদি এই ধরনের ডিরেক্টরি অন্যদের কাছে লিখিত হয় তবে সিস্টেমটি ইতিমধ্যে আপোস করা হয়েছে। - geirha
@ pbr একটি sysadmin অজানাভাবে রুট ফাইল সিস্টেম মুছে ফেলতে পারে। আপনি silly ভুল তৈরীর তৈরীর sysadmins বিরুদ্ধে সতর্ক করতে পারবেন না। যদি আপনি একটি ইন্টারপ্রেটারের একটি নতুন সংস্করণ ইনস্টল করেন যা পিছনে সামঞ্জস্যপূর্ণ নয়, তবে আমি নির্বিশেষে ভাঙ্গন প্রত্যাশা করব। এটি হ্যান্ডেল করার সরল উপায় এটি একটি পৃথক কমান্ড হিসাবে ইনস্টল করা হয়। উদাহরণস্বরূপ আপনার পাইথন সংস্করণ 2.x আছে এবং পাইথন 3 ইনস্টল করুন, আপনি এটি পাইথন 3 হিসাবে ইনস্টল করুন, পাইথন নয়। এবং হিসাবে / অপ্ট / কিছু অ্যাপ্লিকেশন / বিন হিসাবে, কেন পৃথিবীতে এটি সরল অনুমতি / মালিকানা আছে না? কোনও সরকারী অ্যাডমিন সিস্টেম ফাইলগুলিতে সরকারী অনুমতি / মালিকানা নিশ্চিত করবে। - geirha
@ pbr এটা মনে হয় আমরা চিরতরে যেতে পারে, হ্যাঁ। আমি এখনও PATH ব্যবহার করার একটি খারাপ ধারণা কেন দেখতে ব্যর্থ। যদি আপনি এই বিষয়ে আরো আলোচনার জন্য উপযুক্ত আলোচনার বিষয়ে আলোচনা করেন তবে আপনি আমাকে #ubuntu এবং #bash, irc.freenode.net এ অন্যান্য চ্যানেলে খুঁজে পাবেন। - geirha


আমার শীর্ষ গোচাঃ আপনি যদি শেষে একটি নতুন লাইন যোগ করতে ভুলে যান crontab ফাইল। অন্য কথায়, crontab ফাইলটি খালি লাইনের সাথে শেষ হওয়া উচিত।

নীচে এই সমস্যাটির জন্য মানুষের পৃষ্ঠাগুলির প্রাসঙ্গিক বিভাগটি রয়েছে (man crontab তারপরে শেষে চলে যান):

   Although cron requires that each entry in a crontab end  in  a  newline
   character,  neither the crontab command nor the cron daemon will detect
   this error. Instead, the crontab will appear to load normally. However,
   the  command  will  never  run.  The best choice is to ensure that your
   crontab has a blank line at the end.

   4th Berkeley Distribution      29 December 1993               CRONTAB(1)

291



এই ধরনের একটি শোস্টপপার, কিভাবে এটা ক্রন এত বছর নির্দিষ্ট করা হয়েছে? - Capi Etheriel
ভিক্সি ক্রন সংশোধন করা হচ্ছে বলে মনে হচ্ছে: man crontab উবুন্টু 10.10 তে "ক্রনটির জন্য একটি নতুন অক্ষরের অক্ষরে একটি ক্রন্টব্যাণ্ডের প্রতিটি এন্ট্রি দরকার। যদি ক্রোন্ট্যাবের সর্বশেষ এন্ট্রিটি নতুন লাইন অনুপস্থিত থাকে তবে ক্রন ক্রান্তব (অন্তত আংশিকভাবে) ভাঙবে এবং এটি ইনস্টল করতে অস্বীকার করবে।" (এবং শেষ তারিখটি 19 এপ্রিল ২010।) - Marius Gedminas
@barraponto এটি আসলে নতুন পাঠ্য সম্পাদকদের একটি বাগ। "Newline" অক্ষর একটি হতে অনুমিত হয় লাইন সমাপ্তি অক্ষর, তাই একটি টেক্সট ফাইলের চূড়ান্ত লাইনটি এমন একটি নতুন অক্ষরে শেষ হওয়া উচিত যা সম্পাদকটিতে দেখানো হয় না। ভি এবং ভিম সঠিকভাবে চরিত্রটি ব্যবহার করে, এবং নতুন সম্পাদকেরা তাদের অদ্ভুত আচরণ শুরু করার আগে ক্রনটি তৈরি করে ... তাই এটি সংরক্ষণ করে এবং একটি ফাঁকা লাইন সহ। - Izkata
আপনি ব্যবহার করে crontab সম্পাদনা করুন crontab -e এটি সংরক্ষণের অনুমতি দেওয়ার আগে ফাইলটির সিনট্যাক্সটি পরীক্ষা করবে, এতে নতুন লাইনের জন্য একটি চেক রয়েছে। - Tom Harrison Jr
অনুবাদ মূল উক্তি @ চান-হোসুহ, মানুষের পাতা অনুসারে "ক্রনটির জন্য একটি নতুন অক্ষরে ক্রন্টব্যাণ্ডের প্রতিটি এন্ট্রি দরকার। যদি ক্রোন্ট্যাবের সর্বশেষ এন্ট্রিটি নতুন লাইন অনুপস্থিত থাকে, ক্রন ক্রোন্ট্যাব (অন্তত আংশিকভাবে) ভাঙ্গা এবং প্রত্যাখ্যান করবে এটা ইনস্টল করুন। " সম্পাদনা করার সময় crontab সংরক্ষণ করার সময় এই আচরণটি প্রয়োগ করা হবে -e বিকল্প, এবং সম্পাদক স্বাধীন। - Tom Harrison Jr


ক্রন ডেমন চলছে না। আমি সত্যিই এই কয়েক মাস আগে সঙ্গে screwed আপ।

ধরন:

pgrep cron 

যদি আপনি কোন সংখ্যা দেখতে না, ক্রন চলমান হয় না। sudo /etc/init.d/cron start ক্রন শুরু করতে ব্যবহার করা যেতে পারে।

সম্পাদনা করুন: /etc/init.d এর মাধ্যমে init স্ক্রিপ্টগুলি সন্নিবেশ করার পরিবর্তে পরিষেবাটি ব্যবহার করুন ইউটিলিটি, যেমন

sudo service cron start

125



আমাকে pgrep দেখানোর জন্য ধন্যবাদ। আমি ps -ef করছেন রাখা | grep foo - ripper234
আপনি ব্যবহার করতে পারে pidof cron যা crontab মত শব্দ 'ক্রন' আছে অন্যান্য অ্যাপ্লিকেশনের জন্য ফলাফল বাদ দিতে হবে। - Pithikos
অদ্ভুত, এই সব আমাকে ক্রন চালানোর জন্য কিছুই দিতে না, কিন্তু যদি আমি চালানো sudo service cron start আমি পাই start: Job is already running: cron - Colleen
service crond start যদি তার Centos / RHEL - Srihari Karanth


স্ক্রিপ্ট ফাইলের নাম cron.d/, cron.daily/, cron.hourly/ইত্যাদি, ডট থাকতে হবে না (.), অন্যথায় রান অংশ তাদের এড়িয়ে যাবে।

রান অংশ দেখুন (8):

   If neither the --lsbsysinit option nor the --regex option is given then
   the names must consist entirely of upper and lower case  letters,  dig‐
   its, underscores, and hyphens.

   If  the  --lsbsysinit  option  is given, then the names must not end in
   .dpkg-old  or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong  to
   one  or more of the following namespaces: the LANANA-assigned namespace
   (^[a-z0-9]+$);   the   LSB   hierarchical   and   reserved   namespaces
   (^_?([a-z0-9_.]+-)+[a-z0-9]+$);  and  the  Debian cron script namespace
   (^[a-zA-Z0-9_-]+$).

সুতরাং, যদি আপনি একটি ক্রন স্ক্রিপ্ট আছে backup.sh, analyze-logs.pl মধ্যে cron.daily/ ডিরেক্টরি, আপনি এক্সটেনশান নাম অপসারণ করতে চাই।


83



এটি একটি বৈশিষ্ট্য নয় যা একটি বাগ - এটি মাইক্রিপ্ট.ব্যাকআপ বা myscript.original বা myscript.rpm-new এর মত জিনিসগুলিকে মাইক্রিপ্টের পাশে ডানদিকে চালানোর জন্য রাখে। - pbr
@ পিআরবি: ইন্দ্রিয় তোলে। অন্তত এটি ডিবাগিং জন্য সহায়ক হয়েছে run-parts --test (অথবা অন্য কল্পিত বিকল্প মত --debug কারণ সহ skips ফাইল আউটপুট হবে। - Rabarberski
যদি এটি একটি বৈশিষ্ট্য হয়, তবে এটি একটি সুন্দর নয় :( অনেক লোক ফাইল নামতে ডট ব্যবহার করে (backup.sh সবচেয়ে সাধারণ এক)। যদি আপনি একটি স্ক্রিপ্ট নির্বাহ বন্ধ করতে চান তবে, সবচেয়ে লজিক্যাল পদ্ধতি হবে "cron.d" ডিরেক্টরি থেকে এটি মুছে ফেলুন। - MatuDuke
এটি এমন একটি খারাপ বৈশিষ্ট্য যা কার্যকরভাবে এটি একটি বাগ। যদি লোকেরা নিশ্চিত করতে চায় যে নির্দিষ্ট জিনিসগুলি কেবল তখনই চালানো হয় তবে এটি নিশ্চিত করতে একটি সাধারণ সমাপ্তি (যেমন ".list" বা ".cron" বা কিছু) প্রয়োজন হয়। ইচ্ছাকৃতভাবে "বিবেক" বা ".temp" বা যাই হোক না কেন যাই হোক না কেন, সম্ভাব্য বিভাজক হিসাবে বিন্দুটি বাছাই করা, এটি ভবিষ্যদ্বাণীপূর্ণভাবে মানুষকে বিভ্রান্ত করবে এমন ভাবে ছাড়াই পুরোপুরি অনির্দেশ্য। ".Sh", এবং ".pl" মতো আইনী সমাপ্তি কয়েক দশক ধরে ব্যাপকভাবে ব্যবহৃত হয়েছে। তবে অনেক লোক একটি বিন্দু পরিবর্তে "_bak" বা "_temp" বা "-bak" ব্যবহার করেন। এটি একটি ভয়ানক নকশা পছন্দ; এটি সেরা একটি নকশা বাগ। - Teekin


অনেক পরিবেশে cron ব্যবহার করে কমান্ড চালায় sh, অনেক মানুষ এটি ব্যবহার করবে অনুমান bash

একটি ব্যর্থ কমান্ডের জন্য পরীক্ষা বা সমাধান করার পরামর্শগুলি:

  • কমান্ড চালানোর চেষ্টা করুন sh এটা কাজ করে দেখতে
  • এটি একটি bash subshell কমান্ডটিকে ব্যাশে চালানোর জন্য নিশ্চিত করুন:
    bash -c "mybashcommand"
  • Cron কে আপনার crontab এর শীর্ষে শেল সেট করে সকল কমান্ড চালাতে বলুন:
    SHELL=/bin/bash
  • যদি কমান্ড একটি স্ক্রিপ্ট হয় তবে স্ক্রিপ্টটি একটি শেবাং রয়েছে তা নিশ্চিত করুন:
    #!/bin/bash

55



bash পরামর্শ আমার ক্রন সঙ্গে খুব সহায়ক, নির্দিষ্ট সমস্যা। - Maxim Galushka
এই শুধু আমাকে fiddling / সমস্যা সমাধান 1hr কারণ। এমনকি যদি আপনি সমস্যাটির বিষয়ে সচেতন না হন তবে আরও বেশি বিভ্রান্তিকর হয় যদি আপনি সাধারণত শেল হয় তবে স্ক্রিপ্ট ম্যানুয়ালি ঠিকভাবে চালানো হবে bash, কিন্তু সঙ্গে না cron। ধন্যবাদ! - Hendy
একটি দীর্ঘ সময় আগে আমি সম্পর্কিত কিছু মধ্যে দৌড়ে: কমান্ড source ব্যাশে কিন্তু না sh। Cron / sh মধ্যে, একটি সময়কাল ব্যবহার করুন: . envfile বরং source envfile। - kungphu


আমি সময় অঞ্চল সঙ্গে কিছু সমস্যা ছিল। ক্রন তাজা ইনস্টলেশন সময় অঞ্চল সঙ্গে চলমান ছিল। সমাধান cron পুনরায় আরম্ভ করা ছিল:

sudo service cron restart

34



হ্যাঁ, কোনও সিস্টেমে টাইমজোন পরিবর্তন করার পরে, এটি অবশ্যই প্রতিটি পরিষেবাটিকে পুনরায় চালু করতে হবে যা এটির সময় বা এটি পুনরায় বুট করার জন্য সচেতন। আমি রিবুট পছন্দ করি, নিশ্চিত হব যে আমি সবকিছু ধরছি। - pbr
ওহে খোদার খাতিরে, এ ব্যাপারে কয়েক ঘন্টা খুন। পরে সেবা পুনরায় আরম্ভ চেষ্টা * * * * * touch /tmp/cronworks কিছুই করেনি, এখনো আছে RELOAD cronlog এ। - НЛО


আপনার crontab কমান্ড একটি আছে % এটা প্রতীক, cron এটা ব্যাখ্যা করার চেষ্টা করে। তাই যদি আপনি একটি সঙ্গে কোন কমান্ড ব্যবহার করা হয় % এটিতে (যেমন তারিখ কমান্ডের একটি বিন্যাস স্পেসিফিকেশন) আপনাকে এটি থেকে পালাতে হবে।

যে এবং অন্যান্য ভাল Gotchas এখানে:
http://www.pantz.org/software/cron/croninfo.html


29



গত সপ্তাহের জন্য আমার ক্রন চাকরিটি ব্যর্থ হওয়ার কারণে এইটি ঘটেছে। অবশেষে আমার তারিখ একটি পালাবার চরিত্র ছিল না যে figured আউট (পালা অক্ষর কি জন্য খুঁজছেন অন্য কোন লোকেরা ব্যাকস্ল্যাশ)। হ্যাঁ! - Valien
আরো দেখুন আমি কিভাবে execute করতে পারেন date একটি ক্রন ট্যাব কাজ ভিতরে? - Jared Beck
এই পাশাপাশি আমার এক বিট। ধন্যবাদ! - stefansundin


নিখুঁত পথ স্ক্রিপ্ট জন্য ব্যবহার করা উচিত:

উদাহরণ স্বরূপ, /bin/grep পরিবর্তে ব্যবহার করা উচিত grep:

# m h  dom mon dow   command
0 0 *  *  *  /bin/grep ERROR /home/adam/run.log &> /tmp/errors

পরিবর্তে:

# m h  dom mon dow   command
0 0 *  *  *  grep ERROR /home/adam/run.log &> /tmp/errors

এটি বিশেষত চতুর, কারণ শেল থেকে কার্যকর হলে একই কমান্ড কাজ করবে। কারণ যে cron একই আছে না PATH ব্যবহারকারী হিসাবে পরিবেশ পরিবর্তনশীল।


28



গিরহা উত্তরটি দেখুন, আপনি (অবশ্যই) ক্রন এর প্যাথ সংজ্ঞায়িত করতে পারেন - Capi Etheriel
Bzzt। আপনি PATH সংজ্ঞায়িত করতে হবে না - পরম পথ ব্যবহার করে এখানে সেরা অনুশীলন। "কারন অন্য কোনও কম্পিউটারে এক্সিকিউটেবল অন্য কোনও জায়গায় থাকতে পারে" ট্রাম্প না করে "আমি এই প্রোগ্রামটিকে ঠিকভাবে চালাতে চাই এবং অন্য কেউ কেউ আমার মূল প্রোগ্রামের সামনে কোনও পথে ঢুকতে পারে না" - pbr
হ্যাঁ, এটা আমার জন্য ছিল, ক্রোনের বাইরে আমি সরাসরি কমান্ডটি চালাতে পারতাম, ক্রোনের ভেতর এটি সম্পূর্ণ প্রয়োজন ছিল /usr/bin/whatever পথ - Anentropic