ক্রন্টব স্ক্রিপ্টগুলি কেন কাজ করছে না?


525

প্রায়শই, crontabস্ক্রিপ্টগুলি তফসিল অনুসারে বা প্রত্যাশিত হিসাবে কার্যকর করা হয় না। এর জন্য অসংখ্য কারণ রয়েছে:

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

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

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

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


12
crontab -eক্রোনটি প্রভাবিত করতে আপনাকে অবশ্যই বন্ধ করতে হবে। উদাহরণস্বরূপ, ভিআইএম ব্যবহার করে আমি ফাইলটি সম্পাদনা করি এবং :wএটি লিখতে ব্যবহার করি তবে কাজটি ক্রোনটিতে যুক্ত হয় না যতক্ষণ না আমি ছাড়ি। কাজটি আমি আমার পরেও দেখব না :q
DutGRIFF

আমি মনে করি ক্রোন ডিবাগ করার সর্বোত্তম উপায় হ'ল সিসলগ পরীক্ষা করা এবং সমস্যাগুলি খুঁজে পাওয়া।
সুনীল কুমার

আমার ক্ষেত্রে - ইমেলটি আমার স্প্যাম ফোল্ডারে চলেছিল, তাই ..... আপনি ডিবাগিংয়ের জন্য ঘন্টা ব্যয় করার আগে তা পরীক্ষা করে দেখুন: ডি
আলমারুফ

বিদ্যুতের
বিভ্রাট

উত্তর:


501

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

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

* * * * * এনভিটি / টেম্প / এনভি.আউটপুট

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

একটি সাধারণ "গোটচা" হ'ল PATHপরিবেশের পরিবর্তনশীল ভিন্ন। হতে পারে আপনার ক্রোন স্ক্রিপ্টটি somecommandপাওয়া কমান্ডটি ব্যবহার করেছে /opt/someApp/bin, যা আপনি যুক্ত PATHকরেছেন /etc/environment? ক্রোন PATHসেই ফাইলটি থেকে উপেক্ষা করে , সুতরাং somecommandক্রোন দিয়ে চালানোর সময় আপনার স্ক্রিপ্ট থেকে রানিং ব্যর্থ হবে, তবে টার্মিনালে চালানোর সময় কাজ করবে। এটি লক্ষণীয় যে ভেরিয়েবলগুলি /etc/environmentক্রোন জবগুলিতে দেওয়া হবে, কেবল ভেরিয়েবল ক্রোন নির্দিষ্ট করে দেয় না যেমন 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হবে।

আপনি ক্রোনটব ফাইলেও PATH ভেরিয়েবল সেট করতে পারেন যা সমস্ত ক্রোন কাজের ক্ষেত্রে প্রযোজ্য। যেমন

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

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

5
আমি মনে করি আমি কেবল এটির জন্য পড়েছি, এবং শেষের দিকে নতুন লাইন ... ডাবল হোয়াই।
ওয়ার্নার সিডি

6
+1 এর জন্য env, আমি এই আদেশটি সম্পূর্ণরূপে ভুলে গিয়েছিলাম এবং ভেবেছিলাম যে পাঠ কাজ করছে। এটা আসলে আমার ক্ষেত্রে ছিল নিখুঁতভাবে ভিন্ন।
ইজকাটা

8
@pbr এই জাতীয় ডিরেক্টরি যদি অন্যের কাছে লেখার যোগ্য হয় তবে সিস্টেমটি ইতিমধ্যে আপস করা হয়েছে।
গিরিহা

6
@pbr একটি সিসাদমিন অজান্তে মূল ফাইল সিস্টেম মুছতে পারে। নির্বোধ ভুল করার জন্য আপনি সিসাদমিনদের থেকে রক্ষা করতে পারবেন না। যদি আপনি কোনও অনুবাদকের নতুন সংস্করণ ইনস্টল করেন যা পিছনের দিকে সামঞ্জস্যপূর্ণ নয়, আমি নির্বিশেষে ভাঙ্গন আশা করব। এটি পরিচালনা করার বুদ্ধিমান উপায় হ'ল এটি একটি পৃথক কমান্ড হিসাবে ইনস্টল করা। যেমন আপনার অজগর সংস্করণ ২.x রয়েছে এবং পাইথন ৩ ইনস্টল করেন, আপনি এটি পাইথন নয়, পাইথন হিসাবে ইনস্টল করেন as এবং / অপ্ট / সামান্য অ্যাপ্লিকেশন / বিন হিসাবে, কেন পৃথিবীতে এর বুদ্ধিমান অনুমতি / মালিকানা থাকবে না? যে কোনও বুদ্ধিমান প্রশাসক সিস্টেম ফাইলগুলিতে বুদ্ধিমান অনুমতি / মালিকানা নিশ্চিত করবে।
গিরিহা

2
@ পিবিআর মনে হয় আমরা চিরকাল যেতে পারব, হ্যাঁ যদিও এখনও PATH ব্যবহার করা খারাপ ধারণা তা আমি দেখতে ব্যর্থ হয়েছি। আপনি যদি আরও ভালভাবে আলোচনার জন্য উপযুক্ত হিসাবে এটি আরও আলোচনার মতো মনে করেন তবে আপনি আমাকে # বুন্টু এবং # বাশ-এ, অন্যান্য চ্যানেলগুলির মধ্যে, irc.freenode.net- এ
পেয়ে যাবেন

336

আমার শীর্ষস্থানীয় গোছা: আপনি যদি 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)

91
এটি এমন শোস্টোপার, ক্রোনের এত বছরের মধ্যে কীভাবে এটি ঠিক করা হয়নি?
ক্যাপী ইথেরিয়েল

2
ভিক্সি ক্রোনটিতে স্থির করা হয়েছে বলে মনে হচ্ছে: man crontabউবুন্টু ১০.১০ তে "ক্রোনটির প্রয়োজন একটি ক্রন্টাবের প্রতিটি প্রবেশ একটি নতুনরেখায় শেষ হওয়া উচিত a এবং এটি ইনস্টল করতে অস্বীকার করুন। (এবং শেষের তারিখটি ১৯ এপ্রিল ২০১০।)
মারিউস গেডমিনাস

19
@ বারাপন্টো এটি আসলে নতুন পাঠ্য সম্পাদকদের মধ্যে একটি বাগ। "নিউলাইন" অক্ষরটি একটি লাইন সমাপ্তি চরিত্র হিসাবে অনুমিত হয় , সুতরাং কোনও পাঠ্য ফাইলে চূড়ান্ত লাইনটি একটি নতুন লাইন চরিত্রের মধ্যে শেষ হওয়ার কথা রয়েছে যা সম্পাদকটিতে প্রদর্শিত হবে না। ভী এবং ভিম অক্ষরটি সঠিকভাবে ব্যবহার করুন এবং নতুন সম্পাদকরা তাদের অভিনব আচরণ শুরু করার আগে ক্রোন নির্মিত হয়েছিল ... সুতরাং এটি সংরক্ষণ করুন এবং ফাঁকা লাইন সহ playing
ইজকাটা

6
যদি আপনি crontab -eএটি ব্যবহার করে ক্রোনট্যাব সম্পাদনা করেন তবে নতুন লাইনের জন্য একটি চেক সহ একটি সংরক্ষণের অনুমতি দেওয়ার আগে ফাইলের সিনট্যাক্সটি পরীক্ষা করবে।
টম হ্যারিসন জুনিয়র

2
@ চ্যান-হোসুহ, ম্যান পেজ অনুসারে "ক্রোনটির প্রয়োজন একটি ক্রন্টাবের প্রতিটি প্রবেশ একটি নতুনলাইন চরিত্রের মধ্যে শেষ করা উচিত a এটি ইনস্টল করুন। " এই আচরণটি সম্পাদনা করার পরে -eবিকল্পটি ব্যবহার করে ক্রোনট্যাব সংরক্ষণ করার সময় ডাকা হবে এবং সম্পাদকের থেকে স্বতন্ত্র।
টম হ্যারিসন জুনিয়র

139

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

ধরন:

pgrep cron 

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

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

sudo service cron start

সম্পাদনা: এছাড়াও আপনি আধুনিক লিনাক্সে সিস্টেমক্টেল ব্যবহার করতে পারেন, যেমন

sudo systemctl start cron

47
আমাকে pgrep দেখানোর জন্য ধন্যবাদ। আমি পিএস-শেফ করতে থাকি | , grep foo বিন্যাস
ripper234

4
আপনি pidof cronক্রোনটব এর মতো 'ক্রোন' শব্দও রয়েছে এমন অন্যান্য অ্যাপ্লিকেশনগুলির জন্য ফলাফলগুলি বাদ দিতে পারে এমনটি ব্যবহার করতে পারেন ।
পিথিকোস

অদ্ভুত, এগুলি সমস্তই ক্রোন চলমান দেখানোর জন্য আমাকে কিছুই দেয় না, তবে আমি চালালে sudo service cron startআমি পাইstart: Job is already running: cron
কলিন

1
service crond startযদি এর সেন্টোস / আরএইচইএল
শ্রীহরি করণ্থ

91

স্ক্রিপ্টের মধ্যে ফাইলের নাম 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/ডিরেক্টরি, আপনি সেরা চাই এক্সটেনশন নাম মুছে ফেলার জন্য।


10
এটি একটি ত্রুটি নয় একটি বৈশিষ্ট্য - এটি ম্যাসক্রিপ্ট.ব্যাকআপ বা মাইসক্রিপ্ট.রিজিনাল বা মাইসক্রিপ্ট.আরপিএম-এর মতো জিনিসগুলি মাইক্রিপ্টের পাশে ডানদিক থেকে চালানো থেকে রক্ষা করে।
পিবিআর

@ পিবিআর: অর্থবোধ করে। অন্তত এটা ডিবাগিং যদি জন্য সহায়ক হতো run-parts --test(অথবা মত অন্য কাল্পনিক বিকল্প --debugআউটপুট would ফাইল এটা কারণে সহ অগ্রাহ্য।
Rabarberski

8
যদি এটি কোনও বৈশিষ্ট্য হয় তবে এটি খুব সুন্দর নয় :( প্রচুর লোক ফাইলের নামে ডট ব্যবহার করে (ব্যাকআপ.শ সর্বাধিক সাধারণ) uting এটি "ক্রোন.ডি" ডিরেক্টরি থেকে সরান
মাতুডুক 16'14

7
এটি এমন একটি খারাপ বৈশিষ্ট্য যা এটি কার্যকরভাবে একটি বাগ। কোনও নির্দিষ্ট সমাপ্তির (যেমন ".list" বা "। ক্রোন" বা কোনও কিছু) প্রয়োজন যদি লোকেরা নিশ্চিত করতে চায় যে জিনিসগুলি কেবল যখন ইচ্ছা তখনই চালিত হয়। ".বাক" বা ".টেম্প" বা যেকোনো কিছুতে সম্ভাব্য বিভাজক হিসাবে বিনাভাবে বিন্দু বাছাই করা পুরোপুরি অনির্দেশ্য যেভাবে এটি ভবিষ্যদ্বাণী করে মানুষকে বিভ্রান্ত করবে except ".Sh", এবং ".pl" এর মতো আইনী সমাপ্তি দশক ধরে বিস্তৃতভাবে ব্যবহৃত হয়। তবে প্রচুর লোক বিন্দুর পরিবর্তে "_বাক" বা "_টেম্প" বা "-বাক" ব্যবহার করে। এটি একটি ভয়ঙ্কর নকশা পছন্দ; এটি সেরা একটি নকশা বাগ।
টেকিন

68

অনেক পরিবেশে ক্রোন ক্রমান্ড ব্যবহার করে কমান্ড কার্যকর করে sh, আবার অনেকে অনুমান করে যে এটি ব্যবহার করবে bash

ব্যর্থ কমান্ডের জন্য এটি পরীক্ষা বা ঠিক করার পরামর্শ:

  • কমান্ডটি shকাজ করে কিনা তা চালানোর চেষ্টা করুন :

    sh -c "mycommand"
    
  • এটি কমান্ডটি ব্যাশ সাবশেলে মোড়ক করুন যাতে এটি ব্যাশে চালিত হয় তা নিশ্চিত করতে:

    bash -c "mybashcommand"
    
  • ক্রোনকে আপনার ক্রোনট্যাবের শীর্ষে শেলটি সেট করে ব্যাশে সমস্ত কমান্ড চালানোর জন্য বলুন:

    SHELL=/bin/bash
    
  • যদি কমান্ডটি কোনও স্ক্রিপ্ট হয় তবে নিশ্চিত হয়ে নিন যে স্ক্রিপ্টটিতে একটি শেবাং রয়েছে:

    #!/bin/bash
    

বাশ পরামর্শটি আমার ক্রোনটির সাথে খুব কার্যকর এবং স্থির ইস্যু।
ম্যাক্সিম গালুশকা

এটি আমাকে মাত্র 1 ঘন্টা বাজে বাধা / সমস্যা সমাধানের কারণ করেছে। এমনকি যদি আপনি সমস্যাটি সম্পর্কে অবগত না হন তবে আরও বিভ্রান্ত হওয়ার বিষয়টি হ'ল স্ক্রিপ্টটি ম্যানুয়ালি ঠিক চলবে যদি আপনি সাধারণ শেলটি হন bashতবে এটির সাথে নয় cron। ধন্যবাদ!
হেন্ডি

অনেক দিন আগে আমি সম্পর্কিত কিছুতে দৌড়েছি: কমান্ডটি sourceব্যাশে রয়েছে তবে sh নয়। ক্রোন / শি-তে, একটি পিরিয়ড ব্যবহার করুন: . envfileবরং source envfile
কুংফু

@ ক্লকওয়ার্ক মাইকম্যান্ডকে স্ক্রিপ্ট ফাইল হিসাবে চালিত করতে sh "mycommand"বলে sh। মানে sh -c "mycommand"? যে কোনও হারে, এই উত্তরটি বিশেষত ব্যাশে কমান্ডটি চালানোর বিষয়ে বলে মনে হচ্ছে, তবে আপনি কেন shএখানে কমান্ড যুক্ত করলেন ?
ওলোরিন

@ অ্যালরিন আমার বোঝাপড়া থেকে প্রথম বিষয়টির উদ্দেশ্য হ'ল এটিকে sh এর সাথে চালানো এবং চালানো, সমস্যাটি সত্যিকার অর্থে এসেছিল কিনা তা দেখার জন্য যে ক্রোন বাশের পরিবর্তে sh দিয়ে এটি চালাচ্ছে কিনা। তারপরে আবার, বিষয়টি সম্পর্কে আমার খুব কম জ্ঞান আছে, তাই আমার ভুল হতে পারে।
ক্লকওয়ার্ক

39

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

sudo service cron restart

6
হ্যাঁ, একটি সিস্টেমে টাইমজোন পরিবর্তন করার পরে, একজনকে অবশ্যই প্রতিটি সেবার পুনঃসূচনা করতে হবে যা সময়টি কী তা যত্ন করে বা পুনরায় বুট করে। আমি রিবুটটি পছন্দ করি, আমি নিশ্চিত হয়েছি যে আমি সব কিছু পেয়েছি।
পিবিআর

হায় God'sশ্বরের দোহাই, এই জন্য কয়েক ঘন্টা হত্যা। চেষ্টা না করা পরিষেবা পুনরায় চালু করার পরে * * * * * touch /tmp/cronworksকিছুই না করে, তবুও RELOADক্রোনলগ রয়েছে।
НЛО

36

স্ক্রিপ্টগুলির জন্য পরম পথ ব্যবহার করা উচিত:

উদাহরণস্বরূপ, এর /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পরিবেশের পরিবর্তনশীল নেই।


3
গিরিহার উত্তর দেখুন, আপনি ক্রোন এর পথের সংজ্ঞা দিতেই হবে
কেপি ইথেরিয়েল

9
Bzzt। আপনার PATH সংজ্ঞা দেওয়ার দরকার নেই - নিখুঁত পাথ ব্যবহার করা এখানে সেরা অনুশীলন। "কারণ একটি নির্বাহী অন্য কোনও কম্পিউটারে অন্য কোথাও থাকতে পারে" ট্রাম্প করে না "আমি চাই এটি ঠিক এই প্রোগ্রামটি চালানো উচিত এবং অন্য কেউ নয় যে আমার আসল প্রোগ্রামের সামনে
রেখেছিল

1
হ্যাঁ, এটি আমার পক্ষে ছিল, /usr/bin/whatever
ক্রোনের

32

যদি আপনার ক্রোনটব কমান্ডের মধ্যে একটি %চিহ্ন থাকে তবে ক্রোন এটি ব্যাখ্যা করার চেষ্টা করে। সুতরাং আপনি যদি %এটিতে কোনও কমান্ড ব্যবহার করে থাকেন (যেমন তারিখের কমান্ডের একটি ফর্ম্যাট স্পেসিফিকেশন) আপনার এড়াতে হবে।

এটি এবং অন্যান্য ভাল গ্যাটাচস:
http://www.pantz.org/software/cron/croninfo.html


এটিই গত সপ্তাহের জন্য আমার ক্রোন জবকে ব্যর্থ করে তুলছে। অবশেষে বুঝতে পেরেছিলাম যে আমার তারিখের কোনও পালানোর অক্ষর নেই (পালানোর চরিত্রটি কী তা অন্য কোনও লোকের জন্য ব্যাকস্ল্যাশ)। হ্যাঁ!
ভালেন


25

ক্রোন এমন একটি স্ক্রিপ্ট কল করছে যা কার্যকর করা যায় না।

chmod +x /path/to/scripস্ক্রিপ্ট চালানোর মাধ্যমে এক্সিকিউটেবল হয়ে যায় এবং এই সমস্যাটি সমাধান করা উচিত।


5
এটি অনন্য নয় cronএবং কেবল /path/to/scriptকমান্ড লাইন থেকে সম্পাদন করার চেষ্টা করে সহজেই আবিষ্কারযোগ্য ।
আদম মাতান

4
আপনার সাথে স্ক্রিপ্ট নির্বাহ করতে অভ্যস্ত থাকেন . scriptnameবা sh scriptnameবা bash scriptname, তারপর এই একটি হয়ে cron-specific সমস্যা।
এলিয়াহ কাগন

24

এটিও সম্ভব যে ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হয়ে গেছে। এমনকি রুটের পাসওয়ার্ডও শেষ হতে পারে। আপনি পারবেন tail -f /var/log/cron.logএবং আপনি দেখতে পাবেন যে পাসওয়ার্ডের মেয়াদ শেষ হয়ে গেলে ক্রোন ব্যর্থ। এটি করে আপনি পাসওয়ার্ডটি কখনই শেষ না হতে সেট করতে পারেন:passwd -x -1 <username>

কিছু সিস্টেমে (দেবিয়ান, উবুন্টু) ক্রোনের জন্য লগিং ডিফল্টরূপে সক্ষম হয় না। ইন /etc/rsyslog.conf বা /etc/rsyslog.d/50-default.conf লাইন:

# cron.*                          /var/log/cron.log

এটিকে সম্পাদনা করা উচিত ( sudo nano /etc/rsyslog.conf)

cron.*                          /var/log/cron.log

এর পরে, আপনাকে আরএসস্লগের মাধ্যমে পুনরায় চালু করতে হবে

/etc/init.d/rsyslog restart

অথবা

service rsyslog restart 

উত্স: দেবিয়ান লিনাক্সে ক্রন্টব লগিং সক্ষম করুন

কিছু সিস্টেমে (উবুন্টু) ক্রোনের জন্য পৃথক লগিং ফাইল ডিফল্টরূপে সক্ষম হয় না, তবে ক্রোন সম্পর্কিত লগগুলি সিসলগ ফাইলে উপস্থিত হয়। এক ব্যবহার করতে পারেন

cat /var/log/syslog | grep cron -i

ক্রোন সম্পর্কিত বার্তা দেখতে।


আমার কাছে ডেবিয়ান (হুইজি) আছে তবে এখানে কোনও /etc/init.d/rsyslog নেই, কেবল ইনটুইটিলস-সিসলগড এবং সিসকলগড। আমাকে কি কিছু ইনস্টল করতে হবে বা কেবল দুটির মধ্যে একটি পুনরায় চালু করতে হবে?
hgoebl

18

যদি আপনার ক্রোনজবুক জিইআইআই-অ্যাপ্লিকেশনগুলিকে আহ্বান করে তবে তাদের কী ডিসপ্লে ব্যবহার করা উচিত তা তাদের জানানোর দরকার।

উদাহরণ: ক্রোন সহ ফায়ারফক্স লঞ্চ।

আপনার স্ক্রিপ্ট export DISPLAY=:0কোথাও থাকা উচিত ।


অ্যাপলে কোনও কারণে এটির প্রয়োজন ছিল। ধন্যবাদ
ইলজাবেক

* * * * * export DISPLAY=:0 && <command>
লোমাফা

15

অনুমতি সমস্যা বেশ সাধারণ, আমি ভয় করি।

মনে রাখবেন যে একটি সাধারণ কাজ হ'ল রুটের ক্রোনট্যাব ব্যবহার করে সমস্ত কিছু সম্পাদন করা যা কখনও কখনও সত্যই খারাপ ধারণা। যথাযথ অনুমতি নির্ধারণ করা অবশ্যই একটি বৃহত্ উপেক্ষিত সমস্যা।


মনে রাখবেন যে যদি আপনার কাছে কোনও ক্রন্টব লাইন থাকে যা কোনও ফাইলের পাইপ আউটপুট সেট করে থাকে যা এখনও বিদ্যমান নেই এবং ফাইলটির জন্য ডিরেক্টরিটি এমন একটি যা ক্রোন ব্যবহারকারীর অ্যাক্সেস নেই, তবে লাইনটি কার্যকর হবে না।
ইভান ডোনভান

14

অনিরাপদ ক্রোন টেবিলের অনুমতি

ক্রোন টেবিলটি যদি অনুমতিটি সুরক্ষিত না হয় তবে তা প্রত্যাখ্যান করা হবে

sudo service cron restart
grep -i cron /var/log/syslog|tail -2
2013-02-05T03:47:49.283841+01:00 ubuntu cron[49906]: (user) INSECURE MODE (mode 0600 expected) (crontabs/user)

সমস্যাটি সমাধান করা হয়

# correct permission
sudo chmod 600 /var/spool/cron/crontabs/user
# signal crond to reload the file
sudo touch /var/spool/cron/crontabs

প্রথমে আমি নিজেই এটি বের করেছিলাম এবং তারপরে আমি আপনার উত্তরটি খুঁজে পেলাম! তবুও অনেক ধন্যবাদ! আমার ক্ষেত্রে, আমি এসভিএন এর মাধ্যমে / var / spool / ক্রোন / ক্রন্টবগুলিতে কিছু ক্রন্টাবগুলি ফিরিয়ে / পুনরুদ্ধার করেছি যা এর অনুমতিগুলি পরিবর্তন করেছে!
alfonx

12

স্ক্রিপ্টটি অবস্থান-সংবেদনশীল। এটি সর্বদা কোনও স্ক্রিপ্টে পরম পাথ ব্যবহার করার সাথে সম্পর্কিত তবে একেবারে এক নয়। আপনার ক্রোন জব cdচালানোর আগে কোনও নির্দিষ্ট ডিরেক্টরিতে প্রয়োজন হতে পারে, উদাহরণস্বরূপ রেল অ্যাপ্লিকেশনটিতে রেক টাস্কটি সঠিক টাস্ক সন্ধান করার জন্য অ্যাপ্লিকেশন রুটে থাকতে পারে, যথাযথ ডাটাবেস কনফিগারেশন ইত্যাদি উল্লেখ না করে etc.

একটি ক্রন্টব এন্ট্রি

23 3 * * * /usr/bin/rake db:session_purge RAILS_ENV=production

হিসাবে ভাল হবে

23 3 * * * সিডি / ভার / www / উত্পাদন / বর্তমান && / usr / বিন / রেক ডিবি: সেশন_পুর্জ RAILS_ENV = উত্পাদন

বা, ক্রন্টব এন্ট্রি সহজ এবং কম ভঙ্গুর রাখতে:

23 3 * * * /home/<user>/scripts/session-purge.sh

নিম্নলিখিত কোড সহ এতে /home/<user>/scripts/session-purge.sh:

সিডি / ভার / www / উত্পাদন / বর্তমান
/ usr / বিন / রেক ডিবি: সেশন_পুর্জ RAILS_ENV = উত্পাদন

1
ক্রোন থেকে অনুরোধ করা স্ক্রিপ্টটি যদি পিএইচপি এর মতো ব্যাখ্যাযোগ্য ভাষায় লিখিত হয় তবে আপনাকে স্ক্রিপ্টে নিজেই ওয়ার্কিং ডিরেক্টরি সেট করার দরকার হতে পারে। উদাহরণস্বরূপ, পিএইচপি-তে: chdir(dirname(__FILE__));
ইভান ডোনভান

এইটির সাথে কেবল ধরা পড়ে: স্ক্রিপ্টটি আমার হোম ডিরেক্টরিটির মূলের মধ্যে ছিল, তবে আমি এটি সরিয়ে নিয়েছি (এবং ক্রন্টব আপডেট করেছি) এবং কেন এটি কাজ করছে না তা বুঝতে পারি না। স্ক্রিপ্টটি একটি আপেক্ষিক পথ ব্যবহার করছে তা ধরে নিয়েছিল যে ধরে নেওয়া যায় যে এটি স্ক্রিপ্টের অবস্থানের সাথে সম্পর্কিত তবে এটি আসলে আমার হোম ডিরেক্টরিটির মূলের সাথে সম্পর্কিত কারণ ক্রোনটি যে কার্যকরী ডিরেক্টরিটি ব্যবহার করছিল সে কারণেই এটি স্ক্রিপ্ট ছিল কাজ (কারণ স্ক্রিপ্টের প্রত্যাশিত কাজ ডিরেক্টরি ও এটা প্রকৃত শুধু কাজ করছে যখন এটি আমার home ডিরেক্টরির রুট ছিল ঘটেছে সমাপতিত হওয়া থেকে)।
মিশেল জনসন

11

অতীতে কাজ করা ক্রোন্টাব স্পেসগুলি যখন এক ক্রন্টাব ফাইল থেকে অন্য ক্রোন্তাবের কাছে স্থানান্তরিত হয় তখন ভাঙতে পারে। কখনও কখনও এর কারণটি হ'ল আপনি একটি সিস্টেম ক্রন্টব ফাইল থেকে ব্যবহারকারী ক্রন্টব ফাইল বা তদ্বিপরীত থেকে স্পেকটি সরিয়ে নিয়েছেন।

ক্রোন জব স্পেসিফিকেশন বিন্যাসটি ব্যবহারকারীদের ক্রন্টব ফাইলগুলি (/ var / spool / cron / ব্যবহারকারীর নাম বা / var / spool / ক্রোন / crontabs / ব্যবহারকারীর নাম) এবং সিস্টেম crontabs ( /etc/crontabএবং ফাইলগুলিতে /etc/cron.d) এর মধ্যে পৃথক।

কমান্ড-টু-রানের ঠিক আগে সিস্টেম ক্রোনট্যাবগুলিতে একটি অতিরিক্ত ক্ষেত্র 'ব্যবহারকারী' রয়েছে।

এটি george; command not foundযখন কোনও আদেশের বাইরে চলে যেতে /etc/crontabবা /etc/cron.dকোনও ব্যবহারকারীর ক্রন্টব ফাইলটিতে কোনও ফাইল সরিয়ে নিয়ে যায় তেমনি জিনিসগুলি ত্রুটিযুক্ত করতে পারে ।

বিপরীতভাবে, ক্রোন /usr/bin/restartxyz is not a valid usernameযখন বিপরীত ঘটে তখন এর মতো বা অনুরূপ ত্রুটিগুলি সরবরাহ করবে ।


10

ক্রোন স্ক্রিপ্ট --verbose বিকল্পের সাহায্যে একটি কমান্ড চাচ্ছে

আমার কাছে ক্রোন স্ক্রিপ্টটি ব্যর্থ হয়েছিল কারণ স্ক্রিপ্টটি টাইপ করার সময় আমি অটোপাইলটে ছিলাম এবং আমি --verbose বিকল্পটি অন্তর্ভুক্ত করেছি:

#!/bin/bash
some commands
tar cvfz /my/archive/file.tar.gz /my/shared/directory
come more commands

শেল থেকে চালিত করার সময় স্ক্রিপ্টটি ঠিকঠাক চলছিল, তবে ক্রোনট্যাব থেকে চালানোর সময় ব্যর্থ হয়েছিল কারণ শেল থেকে রান করার সময় ভার্বোজ আউটপুট স্টাডাউটে চলে যায়, তবে ক্রোনট্যাব থেকে রান করার সময় কোথাও নেই। 'ভি' অপসারণের সহজ সমাধান:

#!/bin/bash
some commands
tar cfz /my/archive/file.tar.gz /my/shared/directory
some more commands

5
কেন এটি ব্যর্থতার কারণ? বাফার সমস্যা?
অ্যাডাম মতান

ক্রোন জবের মাধ্যমে চালিত কোনও আউটপুট বা ত্রুটিগুলি আপনার মেলবক্সে প্রেরণ করতে চলেছে o সুতরাং আমরা এই ত্রুটিগুলি / আউটপুট সম্পর্কে যত্ন নেওয়া কখনই ভুলে যাব না them আমরা সেগুলি কোনও ফাইল বা / দেব / নালিতে পুনর্নির্দেশ করতে পারি
নিসচা

10

আমি ক্রোন ক্রিয়াকলাপটি ভুলভাবে বর্ণিত সময়সূচীতে ব্যর্থ হতে দেখেছি। এটা একটা কাজ যেমন 11:15 অপরাহ্ন জন্য নির্ধারিত নির্দিষ্ট করার অনুশীলন লাগে 15 23 * * *পরিবর্তে * * 11 15 *বা 11 15 * * *। মধ্যরাত্রি পরে কাজের জন্য সপ্তাহের কোন দিন আরো বিভ্রান্ত পরার এম এফ হয় 2-6, মধ্যরাত্রি পরে না 1-5। নির্দিষ্ট তারিখগুলি সাধারণত একটি সমস্যা কারণ আমরা এগুলি খুব কমই ব্যবহার করি ২ * * 3 1 *য় মার্চ নয়। আপনি যদি নিশ্চিত না হন তবে অনলাইনে আপনার ক্রোন সময়সূচী https://crontab.guru/ এ দেখুন

অসমর্থিত বিকল্প যেমন 2/3সময় নির্দিষ্টকরণ ব্যবহার করে যদি বিভিন্ন প্ল্যাটফর্মের সাথে আপনার কাজ ব্যর্থতা হতে পারে। এটি একটি খুব দরকারী বিকল্প তবে সর্বজনীনভাবে উপলব্ধ নয়। আমি 1-5বা এর মতো তালিকাগুলি নিয়েও ইস্যুগুলি চালিয়েছি 1,3,5

অযোগ্য পাথ ব্যবহার করাও সমস্যা তৈরি করেছে। ডিফল্ট পাথটি সাধারণত /bin:/usr/binতাই কেবলমাত্র মানক কমান্ডগুলি চলবে। এই ডিরেক্টরিগুলিতে সাধারণত কাঙ্ক্ষিত কমান্ড থাকে না। এটি অ-মানক কমান্ড ব্যবহার করে স্ক্রিপ্টগুলিকেও প্রভাবিত করে। অন্যান্য পরিবেশের ভেরিয়েবলগুলিও অনুপস্থিত হতে পারে।

একটি বিদ্যমান ক্রোনট্যাব পুরোপুরি ক্লোবার্ব করা আমার সমস্যার কারণ হয়ে দাঁড়িয়েছে। আমি এখন একটি ফাইল অনুলিপি থেকে লোড। এটি crontab -lক্লোবারড হয়ে গেলে ব্যবহার করে এটি বিদ্যমান ক্রোনটব থেকে পুনরুদ্ধার করা যেতে পারে । আমি ক্রন্টাবের অনুলিপি ~ / বিনে রাখি। এটি জুড়ে মন্তব্য করা হয় এবং লাইন দিয়ে শেষ হয় # EOF। এটি ক্রন্টব এন্ট্রি থেকে প্রতিদিন পুনরায় লোড করা হয়:

#! / Usr / bin / নিম্নলিখিতরূপে crontab পরিবর্তন
# এই ক্রোনটব পুনরায় লোড করুন
#
54 12 * * * $ OME হোম} / বিন / ক্রন্টব

উপরের পুনরায় লোড কমান্ডটি ক্র্যাংট্যাব চলমান একটি পাংয়ের সাথে একটি এক্সিকিউটেবল ক্রোন্টাবের উপর নির্ভর করে। কিছু সিস্টেমে কমান্ডটিতে চলমান ক্রন্টব্যাব প্রয়োজন হয় এবং ফাইলটি নির্দিষ্ট করে দেওয়া হয়। ডিরেক্টরিটি যদি নেটওয়ার্ক-ভাগ করা হয়, তবে আমি প্রায়শই crontab.$(hostname)ফাইলটির নাম হিসাবে ব্যবহার করি । এটি শেষ পর্যন্ত এমন ক্ষেত্রে সংশোধন করবে যেখানে ভুল ক্রন্টব ভুল সার্ভারে লোড হয় ed

ফাইলটি ব্যবহার করা ক্রন্টাব কী হওয়া উচিত তার একটি ব্যাকআপ সরবরাহ করে এবং অস্থায়ী সম্পাদনাগুলি (কেবলমাত্র আমি ব্যবহৃত সময়টি crontab -e) স্বয়ংক্রিয়ভাবে ব্যাক আপ করার অনুমতি দেয়। শিরোনাম পরামিতিগুলি সঠিকভাবে পেতে সহায়তা করে এমন শিরোনাম রয়েছে। অনভিজ্ঞ ব্যবহারকারীরা যখন কোনও ক্রন্টব সম্পাদনা করবেন তখন আমি এগুলি যুক্ত করেছি।

কদাচিৎ, আমি কমান্ডগুলিতে চালিত হয়েছি যা ব্যবহারকারীর ইনপুট প্রয়োজন। এগুলি ক্রন্টবের অধীনে ব্যর্থ হয়, যদিও কিছু ইনপুট পুনঃনির্দেশের সাথে কাজ করবে।


3
এটি পৃথক তিনটি সমস্যা কভার করে। এগুলি পৃথক উত্তরে বিভক্ত করা যেতে পারে?
এলিয়াহ কাগন

9
আপনি কী ব্যাখ্যা করতে পারেন যে কীভাবে 30 23 * * * 11: 15 PM তে অনুবাদ হয়?
জেলটন

@ জেল্টন এটি স্পষ্টতই ভুল ছিল, এটি হওয়া উচিত 15 23 * * *। এখনই সংশোধন করা হয়েছে।
মেলাবিয়াস

7

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

যদি সিস্টেমটি পিএএম ব্যবহার করে এবং অ্যাকাউন্টটি লক করা থাকে তবে এটি এর ক্রোনজব চালানো থেকে বিরত রাখতে পারে। (আমি এটি সোলারিসে পরীক্ষা করেছি, তবে উবুন্টুতে নয়)

আপনি / var / ad / বার্তায় এর মতো বার্তা পেতে পারেন:

অক্টোবর 24 07:51:00 মাইবক্স ক্রোন [29024]: [আইডি 731128 auth.notice] পাম_উনিক্স_একউন্ট: স্থানীয় হোস্ট থেকে লক করা অ্যাকাউন্ট মাইউজারকে বৈধতা দেওয়ার চেষ্টা করছে ক্রোন
অক্টোবর 24 07:52:00 মাইবক্স ক্রোন [29063]: [আইডি 731128 auth.notice] পাম_উনিক্স_একউন্ট: স্থানীয় হোস্ট থেকে লক করা অ্যাকাউন্ট মাইউজারকে বৈধতা দেওয়ার চেষ্টা করছে ক্রোন
অক্টোবর 24 07:53:00 মাইবক্স ক্রোন [29098]: [আইডি 731128 auth.notice] pam_unix_account: ক্রোন স্থানীয় হোস্ট থেকে লক করা অ্যাকাউন্ট মাইউজারকে বৈধতা দেওয়ার চেষ্টা করছে
অক্টোবর 24 07:54:00 মাইবক্স ক্রোন [29527]: [আইডি 731128 লেখক]

আপনার যা করা উচিত তা হ'ল চালিত:

# passwd -u <USERNAME>

অ্যাকাউন্টটি আনলক করার জন্য রুট হিসাবে এবং ক্রন্টব্যাকটি আবার কাজ করা উচিত।


7

আপনার যদি এরকম একটি আদেশ থাকে:

* * * * * /path/to/script >> /tmp/output

এবং এটি কাজ করে না এবং আপনি কোনও আউটপুট দেখতে পাচ্ছেন না, এর অর্থ অগত্যা ক্রোন কাজ করছে না। স্ক্রিপ্টটি নষ্ট হয়ে যেতে পারে এবং আউটপুট স্টার্ডারে চলে যায় যা / টিএমপি / আউটপুটে পাস হয় না। এই আউটপুটটি ক্যাপচার করেও এটি কেস নয় তা পরীক্ষা করুন:

* * * * * /path/to/script >> /tmp/output 2>&1

এটি আপনাকে আপনার সমস্যাটি ধরতে সহায়তা করে কিনা তা দেখার জন্য।


3

=== ডকার সতর্কতা ===

আপনি যদি ডকার ব্যবহার করছেন,

আমি মনে করি এটি যুক্ত করা ঠিক হবে যে আমি পটভূমিতে চালানোর জন্য ক্রোন তৈরি করতে পারি না।

ধারকটির ভিতরে ক্রোন কাজ চালানোর জন্য, আমি সুপারভাইজার ব্যবহার করেছি এবং cron -fঅন্যান্য প্রক্রিয়াটির সাথে দৌড়েছি ।

সম্পাদনা করুন: অন্য সমস্যা - HOST নেটওয়ার্কিং দিয়ে ধারক চালানোর সময় আমি এটি কাজ করার ব্যবস্থাও করিনি। এই সমস্যাটি এখানেও দেখুন: https://github.com/phusion/baseimage-docker/issues/144



3

আমি একটি ইনস্টল শেল স্ক্রিপ্ট লিখছিলাম যা একটি ডাটাবেস থেকে পুরানো লেনদেনের ডেটা শুদ্ধ করতে অন্য স্ক্রিপ্ট তৈরি করে। কাজের অংশ হিসাবে এটি cronযখন একটি ডাটাবেস লোড কম ছিল একটি নির্বিচারে সময়ে চালানোর জন্য প্রতিদিনের কাজটি কনফিগার করতে হয়েছিল।

আমি mycronjobক্রোন শিডিউল, ব্যবহারকারীর নাম এবং কমান্ড দিয়ে একটি ফাইল তৈরি করেছি এবং এটি /etc/cron.dডিরেক্টরিতে অনুলিপি করেছি । আমার দুটি গোছা:

  1. mycronjob ফাইল চালানোর জন্য রুটের মালিকানাধীন থাকতে হয়েছিল
  2. আমাকে ফাইলটির অনুমতিগুলি 644 - 664 এ চালানো হবে না।

একটি অনুমতি সমস্যা এর /var/log/syslogঅনুরূপ কিছু হিসাবে উপস্থিত হবে :

Apr 24 18:30:01 ip-11-22-33-44 cron[40980]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab)
Apr 24 18:30:01 ip-11-22-33-44 cron[40980]: (*system*) INSECURE MODE (group/other writable) (/etc/cron.d/user)

প্রথম লাইনটি /etc/crontabফাইলটিকে বোঝায় এবং পরে আমার নীচে রাখা একটি ফাইলকে বোঝায় /etc/cront.d


2

একরকম লেখা লাইন ক্রন্টব বুঝতে পারে না। এটি সঠিকভাবে লেখা দরকার। এখানে CrontabHowTo


1
এটি কীভাবে ডিবাগ করা যায়?
আদম মতান

ক্রোন এর ত্রুটি লগ পর্যালোচনা সর্বাধিক সাধারণ উপায়। আইআরসি'র ক্রন্টব -e 'ফাইলটি সম্পাদনা করার পরে একটি বাক্য গঠনকে বিশ্লেষণ করে - তবে তা সর্বজনীন হতে পারে না।
পিবিআর

2

ক্রোন ডেমন চলতে পারে, তবে বাস্তবে কাজ করছে না। ক্রোন পুনরায় চালু করার চেষ্টা করুন:

sudo /etc/init.d/cron restart

3
আমি প্রযোজনায় এই মামলাটি কখনও দেখিনি। এর অর্থ এই নয় যে এটি ঘটেনি - কেবল যে আমি ইউএনএক্স এবং লিনাক্স ব্যবহার করেছিলাম 30 বছরে এটি দেখিনি। ক্রোন অত্যন্ত উন্মত্ত।
পিবিআর

1
আমি নিশ্চিত নই তবে আমি মনে করি এটি আসলে আমার সাথে ঘটেছিল। আমি pidofক্রোন চেষ্টা করেও কিছু পেলাম না। serviceইউটিলিটি ব্যবহারের চেষ্টা করা হয়েছে এবং এটি বলেছে যে ক্রোন ইতিমধ্যে চলছে। কেবল এই আদেশটি চালিয়ে pidofআবার দৌড়াল এবং আমি একটি ফলাফল পেয়েছি।
কলিন 17

2

"ক্রন্টব -e" এর মাধ্যমে ক্রোনটিতে একটি লাইনে ব্যবহারকারীর নাম যুক্তি দিয়ে লেখা। আমি ব্যবহারকারীদের (বা সিসাদমিনগুলি) তাদের শেল স্ক্রিপ্টগুলি লিখতে এবং কেন তারা স্বয়ংক্রিয় হয় না তা বোঝে না। "ব্যবহারকারী" যুক্তিটি / etc / crontab এ বিদ্যমান, তবে ব্যবহারকারী-সংজ্ঞায়িত ফাইল নয় not সুতরাং, উদাহরণস্বরূপ, আপনার ব্যক্তিগত ফাইলটি এমন কিছু হবে:

# m h dom mon dow command

* * */2  *   *  /some/shell/script

যেখানে / ইত্যাদি / ক্রোনটব হবে:

# m h dom mon dow user   command

* * */2  *   *  jdoe   /some/shell/script

তাহলে, আপনি কেন পরে করবেন? ঠিক আছে, আপনি কীভাবে নিজের অনুমতি সেট করতে চান তার উপর নির্ভর করে এটি খুব বিভ্রান্ত হতে পারে। আমি এমন ব্যবহারকারীদের জন্য কাজগুলি স্বয়ংক্রিয় করতে স্ক্রিপ্ট লিখেছি যারা জটিলতা বোঝেন না, বা শ্রোতার সাথে বিরক্ত করতে চান না। এতে অনুমতি সেট করে --x------আমি স্ক্রিপ্টটি এটিকে পড়তে (এবং সম্ভবত দুর্ঘটনাক্রমে পরিবর্তন করা) সক্ষম না করেই সম্পাদনযোগ্য করে তুলতে পারি। তবে আমি এই কমান্ডটি অন্য একটি ফাইলের সাথে এক ফাইল থেকে চালাতে চাইছি (সুতরাং এটি বজায় রাখা সহজ করে তোলে) তবে নিশ্চিত হয়ে নিন যে ফাইল আউটপুট সঠিক মালিককে নির্ধারিত করা হয়েছে। এটি করা (কমপক্ষে উবুন্টু ১০.১০ এ) ফাইল পড়ার পাশাপাশি নির্বাহের অক্ষমতা উভয়ই ভেঙে ফেলেছে, এবং / ইত্যাদি / ক্রন্টবায় পিরিয়ড রাখার সাথে পূর্বোক্ত সমস্যাটি (যা যথেষ্ট মজাদার, মধ্য দিয়ে যাওয়ার সময় কোনও ত্রুটি সৃষ্টি করে না crontab -e) ।

উদাহরণস্বরূপ, আমি শেল স্ক্রিপ্টের sudo crontab -eসাথে একইভাবে রুট অনুমতি নিয়ে স্ক্রিপ্ট চালানোর জন্য উদাহরণগুলি দেখেছি chown username file_output। ঝাপটায়, তবে এটি কাজ করে। আইএমএইচও, আরও কৌতূহলী বিকল্পটি এটি /etc/crontabব্যবহারকারীর নাম ঘোষণা করা এবং যথাযথ অনুমতি সহ রাখা, সুতরাং file_outputসঠিক জায়গা এবং মালিকের কাছে যায়।


"এটি করার জন্য (কমপক্ষে উবুন্টু ১০.১০ এ) ফাইলটি পড়ার পাশাপাশি চালানো ও চালানো উভয়ই অক্ষমতার উপর ভেঙে যায়" ..... আমাকে স্পষ্ট করে বলা উচিত: / ইত্যাদি / ক্রন্টব (ডিফল্টরূপে) পড়ার দরকার পড়েছে এবং অনুমতিগুলি কার্যকর করতে পারে, যেখানে আপনি থাকতেই পারেন ক্রোনজব তৈরি করতে "sudo crontab -e" চালান যা "ডাব্লু" এর অনুমতি প্রয়োজন এবং ".sh" এর মতো এক্সটেনশানগুলির সমস্যা উভয়কেই ওভার্রাইড করে। ক্রোন কোডটি আলাদা করতে এবং কেন এটি কাজ করে তা যাচাই করার জন্য আমার হাতে সময় নেই, কেবলমাত্র একটি বিবরণ আমি লক্ষ্য করেছি।
ম্যাঙ্গে

2

অ্যারোন পের্ট ভার্বোজ মোড সম্পর্কে যা উল্লেখ করেছে তা বন্ধ করে দেওয়া, কখনও কখনও ভার্বোস মোডে না থাকা স্ক্রিপ্টগুলি প্রারম্ভিক হয় তবে শেষ না হলে যদি অন্তর্ভুক্ত কমান্ডের ডিফল্ট আচরণ স্ক্রিনে একটি লাইন বা আরও কিছু আউটপুট প্রবর্তন করা হয়। উদাহরণস্বরূপ, আমি আমাদের ইন্ট্রানেটের জন্য একটি ব্যাকআপ স্ক্রিপ্ট লিখেছিলাম যা কার্ল ব্যবহার করে, এমন একটি ইউটিলিটি যা দূরবর্তী সার্ভারগুলিতে ফাইলগুলি ডাউনলোড বা আপলোড করে এবং আপনি যদি এইচটিটিপি-র মাধ্যমে কেবল রিমোট ফাইলগুলিতে অ্যাক্সেস করতে পারেন তবে তা বেশ কার্যকর। 'কার্ল http://something.com/somefile.xls ' ব্যবহারের ফলে আমার লেখা একটি স্ক্রিপ্ট হ্যাং হয়ে যায় এবং কখনই সম্পূর্ণ হয় না কারণ এটি একটি অগ্রগতি লাইনের পরে একটি নতুন লাইন ছড়িয়ে দেয়। এটিকে কোনও তথ্য আউটপুট না করতে বলার জন্য আমাকে নীরব পতাকা ব্যবহার করতে হয়েছিল (এবং গুলি), এবং ফাইলটি ডাউনলোড করতে ব্যর্থ হলে হ্যান্ডেল করতে নিজের কোডে লিখতে হয়েছিল।


1
যে প্রোগ্রামগুলিতে নীরব মোড নেই, আপনি তাদের আউটপুটটিতে পুনর্নির্দেশ করতে পারেন /dev/null। উদাহরণস্বরূপ: some-command > /dev/nullএটি কেবল স্ট্যান্ডার্ড আউটপুটটিকে পুনর্নির্দেশ করবে এবং ত্রুটি আউটপুট নয় (যা সাধারণত আপনি যা চান তাই আপনি ত্রুটি সম্পর্কে অবহিত হতে চান)। ত্রুটি আউটপুটও পুনর্নির্দেশ করতে, ব্যবহার করুন some-command &> /dev/null
এলিয়াহ কাগন

হ্যাঁ, পূর্ব-উল্লিখিত স্ক্রিপ্টটি লেখার সময় এটি আমার প্রথম চিন্তা ছিল। আমি ভুলে গিয়েছি কেন আমি এটি ব্যবহার করিনি, সম্ভবত এমন কিছু মানহীন আচরণ যা সমাধান করতে পেরেছে said আমি জানি যে ভার্বোস / ইন্টারেক্টিভ মোডটি কয়েকটি কমান্ডের ডিফল্ট (আমি আপনার দিকে নজর দিচ্ছি, স্ক্রিপ!), যার অর্থ শেল স্ক্রিপ্টগুলির মসৃণ ক্রিয়াকলাপের জন্য আপনাকে হ্যাড আউটপুট প্রয়োজন।
জুনে

2

যদিও আপনি আপনার ক্রোনটেবলে পরিবেশের পরিবর্তনগুলি সংজ্ঞায়িত করতে পারেন, আপনি শেল স্ক্রিপ্টে নেই। সুতরাং নীচের মতো নির্মাণগুলি কাজ করবে না:

SOME_DIR=/var/log
MY_LOG_FILE=${SOME_LOG}/some_file.log

BIN_DIR=/usr/local/bin
MY_EXE=${BIN_DIR}/some_executable_file

0 10 * * * ${MY_EXE} some_param >> ${MY_LOG_FILE}

এর কারণ ভেরিয়েবলগুলি ক্রন্টেবলের মতো ব্যাখ্যা করা যায় না: সমস্ত মান স্বতন্ত্রভাবে নেওয়া হয়। আপনি যদি বন্ধনী বাদ দেন তবে এটি একই is সুতরাং আপনার আদেশগুলি চলবে না, এবং আপনার লগ ফাইলগুলি লিখিত হবে না ...

পরিবর্তে আপনাকে অবশ্যই আপনার সমস্ত পরিবেশের ভেরিয়েবলগুলি সোজাভাবে সংজ্ঞায়িত করতে হবে:

SOME_DIR=/var/log
MY_LOG_FILE=/var/log/some_file.log

BIN_DIR=/usr/local/bin
MY_EXE=/usr/local/bin/some_executable_file

0 10 * * * ${MY_EXE} some_param >> ${MY_LOG_FILE}

2

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

goaccessওয়েব সার্ভার লগ ফাইল বিশ্লেষণ করার প্রোগ্রামটি একটি উদাহরণ । এটি ক্রোনটিতে কাজ করে না:

goaccess -a -f /var/log/nginx/access.log > output.html

এবং goaccessপ্রতিবেদন তৈরির পরিবর্তে সহায়তা পৃষ্ঠাটি দেখায়। শেলের মধ্যে এটি পুনরুত্পাদন করা যেতে পারে

goaccess -a -f /var/log/nginx/access.log > output.html < /dev/null

এর স্থির সিদ্ধান্তটি goaccessহ'ল ফাইলটি পড়ার পরিবর্তে স্ট্ডিন থেকে লগটি পড়তে হবে, তাই ক্রাউনট্যাব এন্ট্রিতে পরিবর্তনটি সমাধান করা সমাধান

cat /var/log/nginx/access.log | goaccess -a > output.html

2

আমার ক্ষেত্রে ক্রোন এবং ক্রোন্টাবের আলাদা মালিক ছিল।

কাজ করছি না আমার এটি ছিল:

User@Uva ~ $ ps -ef | grep cron | grep -v grep
User    2940    7284 pty1     19:58:41 /usr/bin/crontab
SYSTEM   11292     636 ?        22:14:15 /usr/sbin/cro 

মূলত আমাকে ক্রোন-কনফিগার চালাতে হয়েছিল এবং প্রশ্নের সঠিক উত্তর দিতে হয়েছিল। এখানে একটি পয়েন্ট রয়েছে যেখানে আমাকে আমার 'ব্যবহারকারীর' অ্যাকাউন্টের জন্য আমার উইন 7 ব্যবহারকারীর পাসওয়ার্ড লিখতে হবে। আমি যা করেছি তা পড়া থেকে দেখে মনে হচ্ছে এটি কোনও সম্ভাব্য সুরক্ষা সমস্যা তবে আমি একক হোম নেটওয়ার্কের একমাত্র প্রশাসক তাই আমি ঠিক করেছিলাম ঠিক আছে was

এখানে কমান্ড ক্রমটি আমাকে যেতে পেয়েছে:

User@Uva ~ $ cron-config
The cron daemon can run as a service or as a job. The latter is not recommended.
Cron is already installed as a service under account LocalSystem.
Do you want to remove or reinstall it? (yes/no) yes
OK. The cron service was removed.

Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec

You must decide under what account the cron daemon will run.
If you are the only user on this machine, the daemon can run as yourself.
   This gives access to all network drives but only allows you as user.
To run multiple users, cron must change user context without knowing
  the passwords. There are three methods to do that, as explained in
  http://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-nopasswd1
If all the cron users have executed "passwd -R" (see man passwd),
  which provides access to network drives, or if you are using the
  cyglsa package, then cron should run under the local system account.
Otherwise you need to have or to create a privileged account.
  This script will help you do so.
Do you want the cron daemon to run as yourself? (yes/no) no

Were the passwords of all cron users saved with "passwd -R", or
are you using the cyglsa package ? (yes/no) no

Finding or creating a privileged user.
The following accounts were found: 'cyg_server' .
This script plans to use account cyg_server.
Do you want to use another privileged account name? (yes/no) yes
Enter the other name: User

Reenter: User


Account User already exists. Checking its privileges.
INFO: User is a valid privileged account.
INFO: The cygwin user name for account User is User.

Please enter the password for user 'User':
Reenter:
Running cron_diagnose ...
... no problem found.

Do you want to start the cron daemon as a service now? (yes/no) yes
OK. The cron daemon is now running.

In case of problem, examine the log file for cron,
/var/log/cron.log, and the Windows event log (using /usr/bin/cronevents)
for information about the problem cron is having.

Examine also any cron.log file in the HOME directory
(or the file specified in MAILTO) and cron related files in /tmp.

If you cannot fix the problem, then report it to cygwin@cygwin.com.
Please run the script /usr/bin/cronbug and ATTACH its output
(the file cronbug.txt) to your e-mail.

WARNING: PATH may be set differently under cron than in interactive shells.
         Names such as "find" and "date" may refer to Windows programs.


User@Uva ~ $ ps -ef | grep cron | grep -v grep
    User    2944   11780 ?        03:31:10 /usr/sbin/cron
    User    2940    7284 pty1     19:58:41 /usr/bin/crontab

User@Uva ~ $

1
যদিও ভাল নথিভুক্ত করা হয়েছে, এটি সাইগউইন-নির্দিষ্ট পয়েন্টের মতো দেখাচ্ছে; এটা কি আসলেই জিজ্ঞাসুবন্তুর অন্তর্গত?
sxc731

2

আমার RHEL7 সার্ভারে, রুট ক্রোন জবগুলি চলবে, তবে ব্যবহারকারীর কাজগুলি তা করবে না। আমি খুঁজে পেয়েছি যে কোনও হোম ডিরেক্টরি ছাড়া, কাজগুলি চলবে না (তবে আপনি / var / লগ / ক্রোনটিতে ভাল ত্রুটি দেখতে পাবেন)। আমি যখন হোম ডিরেক্টরি তৈরি করেছি তখন সমস্যাটি সমাধান করা হয়েছিল।


2

আপনি যদি উইন্ডোজ সম্পাদক (সাম্বা বা কোনও কিছুর মাধ্যমে) ব্যবহার করে আপনার ক্রন্টব ফাইলটি সম্পাদনা করেন এবং new n \ r বা ঠিক just r দিয়ে নতুন লাইনগুলি প্রতিস্থাপন করেন তবে ক্রোন চলবে না।

এছাড়াও, আপনি যদি /etc/cron.d/* ব্যবহার করছেন এবং সেই ফাইলগুলির মধ্যে একটির মধ্যে \ r থাকে, ক্রোন ফাইলগুলি সরিয়ে নিয়ে যায় এবং যখন এটি কোনও খারাপ ফাইলকে আঘাত করে stop সমস্যা না হলে নিশ্চিত?

ব্যবহার করুন:

od -c /etc/cron.d/* | grep \r
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.