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

প্রায়শই, crontab স্ক্রিপ্ট পরিকল্পনাতে বা হিসাবে প্রত্যাশিত মৃত্যুদন্ড কার্যকর করা হয় না. যে জন্য অনেক কারণ আছে:

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

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

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

শেল থেকে প্রত্যাশিত হিসাবে চালানো কিন্তু শস্যদানা দ্বারা ভুল করে চালানো কমান্ড.

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

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

>* * * * * ইএনভি /টিএমপি / ইএনভিআউটপুট

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

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

এটি পেতে, কেবল নিজের সেট করুন PATH স্ক্রিপ্ট উপরের পরিবর্তনশীল. যেমন

#!/bin/bashPATH=/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=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin15 1 * * * backupscript --incremental /home /root

আমার শীর্ষ গোটচা: আপনি যদি শেষে একটি নতুন লাইন যুক্ত করতে ভুলে যান 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)

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

ধরন:

pgrep cron 

যদি আপনি কোনও নম্বর না দেখেন (অর্থাত্ ক্রনের প্রধান পিআইডি), তবে ক্রন চলছে না sudo /etc/init.d/cron start ক্রন শুরু করতে ব্যবহার করা যেতে পারে.

সম্পাদনা করুন: বরং মাধ্যমে /ইত্যাদি/আইএনআইটি স্ক্রিপ্ট আহ্বান চেয়ে.ডি, সার্ভিসিউটিলিটি ব্যবহার করুন, যেমন

sudo service cron start

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

sudo systemctl start cron

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

অনেক পরিবেশে ক্রন ব্যবহার করে কমান্ড কার্যকর করে sh, যদিও অনেক লোক ধরে নেয় যে এটি ব্যবহার করবে bash.

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

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

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

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

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

    #!/bin/bash

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

sudo service cron restart

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

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

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

পরিবর্তে:

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

শেল থেকে মৃত্যুদন্ড কার্যকর করার সময় একই কমান্ড কাজ করবে, কারণ এই, বিশেষ করে চতুর. কারণ যে cron একই নেই PATH ব্যবহারকারী হিসাবে পরিবেশ পরিবর্তনশীল.

যদি আপনার ক্রন্টব কমান্ডের একটি থাকে % এটা প্রতীক, শস্যদানা এটা ব্যাখ্যা করার চেষ্টা করে. সুতরাং যদি আপনি একটি সঙ্গে কোন কমান্ড ব্যবহার করা হয় % এটা (যেমন তারিখ কমান্ড একটি বিন্যাস স্পেসিফিকেশন হিসাবে) আপনি এটা অব্যাহতি প্রয়োজন হবে .

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

শস্যদানা এক্সিকিউটেবল নয় যে একটি স্ক্রিপ্ট আহ্বান করা হয়.

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

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

কিছু সিস্টেমে (ডেবিয়ান, উবুন্টু) শস্যদানা জন্য লগিং ডিফল্টরূপে সক্রিয় করা হয় না. মধ্যে / ইত্যাদি / আরএসআইএসলগকনফ অথবা / ইত্যাদি / আরএসআইএসলগডি / 50-ডিফল্ট.কনফ লাইন:

# 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

শস্যদানা সংক্রান্ত বার্তা দেখতে.

ক্রোনকে প্রভাবিত করার জন্য আপনাকে অবশ্যই ক্রন্টব-ই বন্ধ করতে হবে আমি ফাইল সম্পাদনা এবং ব্যবহার :ওয়াট এটা লিখতে কিন্তু আমি প্রস্থান না হওয়া পর্যন্ত কাজ শস্যদানা যোগ করা হয় না ব্যবহার করে উদাহরণস্বরূপ. তাই আমি পরে পর্যন্ত কাজ দেখতে পাবেন না আমি :প্রশ্ন ' এছাড়াও

আমি শস্যদানা ডিবাগ করার সবচেয়ে ভালো উপায় সিস্লগ চেক এবং সমস্যা খুঁজে বের করতে হয় মনে.

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

বিদ্যুৎ বিভ্রাট

এই এক চেক করুন cron - Script doesn't run via crontab but works fine standalone - Ask Ubuntu