আপনার ক্রন্টব সম্পর্কিত সমস্ত হতাশা / সমস্যাগুলি কীভাবে সমাধান করবেন (লিনাক্স)
এটি একটি সম্প্রদায় উইকি , যদি আপনি এই উত্তরের সাথে কোনও ভুল দেখেন বা অতিরিক্ত তথ্য থাকে তবে দয়া করে এটি সম্পাদনা করুন।
প্রথম, মৌলিক পরিভাষা:
- ক্রোন (8) ডেমন যা নির্ধারিত কমান্ডগুলি কার্যকর করে।
- ক্রন্টব (1) হ'ল প্রোগ্রামটি ব্যবহারকারী ক্রন্টব (5) ফাইল সংশোধন করতে ব্যবহৃত হয়।
- ক্রন্টব (5) একটি ব্যবহারকারী ফাইল যা ক্রোন (8) এর জন্য নির্দেশাবলী ধারণ করে।
পরবর্তী, ক্রোন সম্পর্কে শিক্ষা:
সিস্টেমের প্রতিটি ব্যবহারকারীর নিজস্ব ক্রন্টব ফাইল থাকতে পারে। রুট এবং ব্যবহারকারী ক্রন্টব ফাইলগুলির অবস্থান সিস্টেম নির্ভর কিন্তু সেগুলি সাধারণত নীচে থাকে /var/spool/cron
।
একটি সিস্টেম-ওয়াইড /etc/crontab
ফাইল রয়েছে, /etc/cron.d
ডিরেক্টরিটিতে ক্রন্টব টুকরা থাকতে পারে যা ক্রোন দ্বারা পড়া এবং ক্রিয়াও করা হয়। কিছু লিনাক্স ডিস্ট্রিবিউশন (যেমন, রেড হ্যাট) -এর মধ্যে /etc/cron.{hourly,daily,weekly,monthly}
রয়েছে ডিরেক্টরি, স্ক্রিপ্ট যা প্রতিটি ঘন্টা / দিন / সপ্তাহ / মাসে কার্যকর করা হবে, মূল সুযোগ সহ।
রুট সর্বদা crontab কমান্ড ব্যবহার করতে পারে; নিয়মিত ব্যবহারকারীদের অ্যাক্সেস দেওয়া হতে পারে বা নাও হতে পারে। আপনি যখন কমান্ডের সাহায্যে crontab -e
ক্রন্টব ফাইলটি সম্পাদনা করেন এবং সংরক্ষণ করেন, ক্রন্ড এটি মৌলিক বৈধতার জন্য যাচাই করে তবে আপনার ক্রন্টব ফাইলটি সঠিকভাবে গঠনের গ্যারান্টি দেয় না। এমন একটি ফাইল বলা হয়েছে cron.deny
যা ব্যবহারকারীরা ক্রোন ব্যবহার করতে পারবেন না তা নির্দিষ্ট করবে। cron.deny
ফাইল অবস্থান সিস্টেম নির্ভরশীল এবং মোছা যাবে, যা সমস্ত ব্যবহারকারী ক্রন ব্যবহার করতে অনুমতি দেবে।
কম্পিউটারটি চালিত না থাকলে বা ক্রন্ড ডেমন চলমান না থাকলে এবং কমান্ড চালানোর তারিখ / সময় পার হয়ে গেলে, ক্রন্ড ক্যাপআপ গ্রহণ করবে না এবং অতীত অনুসন্ধানগুলি চালাবে না।
ক্রোনটব বিশদ, কীভাবে একটি কমান্ড তৈরি করা যায়:
একটি ক্রন্টব কমান্ড একটি একক লাইন দ্বারা প্রতিনিধিত্ব করা হয়। আপনি \
একাধিক লাইনে একটি কমান্ড প্রসারিত করতে ব্যবহার করতে পারবেন না । হ্যাশ ( #
) চিহ্নটি এমন একটি মন্তব্য উপস্থাপন করে যার অর্থ লাইনটিতে থাকা কোনও কিছুই ক্রোন দ্বারা উপেক্ষা করা হয়। শীর্ষস্থানীয় সাদা স্থান এবং ফাঁকা লাইন উপেক্ষা করা হয়।
%
আপনার কমান্ডে শতাংশ ( ) সাইন ব্যবহার করার সময় খুব সাবধানতা অবলম্বন করুন । যদি তারা না পালায় \%
তবে এগুলি নতুন লাইনে রূপান্তরিত হয় এবং প্রথম অ-পালনের পরে সমস্ত কিছু %
আপনার স্ট্যান্ডিনের আদেশে সরিয়ে দেওয়া হয়।
ক্রন্টব ফাইলগুলির জন্য দুটি ফর্ম্যাট রয়েছে:
ব্যবহারকারী crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
সিস্টেম প্রশস্ত /etc/crontab
এবং /etc/cron.d
টুকরা
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * user-name command to be executed
লক্ষ্য করুন যে পরবর্তীটির জন্য ব্যবহারকারীর নাম প্রয়োজন। কমান্ডটি নামযুক্ত ব্যবহারকারী হিসাবে চালিত হবে।
লাইনের প্রথম 5 ক্ষেত্র কমান্ডটি চালিত হওয়ার সময় (গুলি) উপস্থাপন করে। আপনি সময় নির্দিষ্টকরণে নম্বর বা যেখানে প্রযোজ্য দিন / মাসের নাম ব্যবহার করতে পারেন।
- ক্ষেত্রগুলি স্পেস বা ট্যাব দ্বারা পৃথক করা হয়।
- একটি কমা (
,
) একটি তালিকা নির্দিষ্ট করতে ব্যবহৃত হয় যেমন 1,4,6,8 যার অর্থ 1,4,6,8 এ চালানো হয় run
- ব্যাপ্তিগুলি একটি ড্যাশ (
-
) দিয়ে সুনির্দিষ্ট করা হয় এবং তালিকাগুলির সাথে মিলিত হতে পারে উদাহরণস্বরূপ ১-৩,৯-১২ যার অর্থ 1 এবং 3 এর মধ্যে 9 এবং 12 এর মধ্যে থাকে।
/
চরিত্র একটি পদক্ষেপ যেমন 2/5 যা 2 থেকে শুরু মানে তারপর প্রতি 5 পরিচয় করিয়ে দিতে (2,7,12,17,22 ...) ব্যবহার করা যাবে। এগুলি শেষের দিকে যায় না।
*
একটি ক্ষেত্রের একটি তারকাচিহ্ন (ter ) ক্ষেত্রের জন্য পুরো ব্যাপ্তিটি বোঝায় (উদাহরণস্বরূপ 0-59
মিনিটের ক্ষেত্রের জন্য)।
- ব্যাপ্তি এবং পদক্ষেপগুলি একত্রিত হতে পারে উদাহরণস্বরূপ
*/2
প্রাসঙ্গিক ক্ষেত্রে সর্বনিম্ন থেকে শুরু করে প্রতি 2 উদাহরণস্বরূপ 0 মিনিটের জন্য (0,2 ... 58), 1 মাসের জন্য (1,3 ... 11) ইত্যাদি sign
ডিবাগিং ক্রোন কমান্ড
মেল চেক করুন!
ডিফল্টরূপে ক্রোন কমান্ড থেকে যে কোনও আউটপুট ব্যবহারকারীকে মেল করবে এটি কমান্ডটি চালাচ্ছে। যদি আউটপুট না থাকে তবে কোনও মেল থাকবে না। যদি আপনি ক্রোন অন্য কোনও অ্যাকাউন্টে মেল প্রেরণ করতে চান তবে আপনি ক্রন্টব ফাইলটিতে মাইল্টোর পরিবেশ পরিবর্তনশীল সেট করতে পারেন যেমন
MAILTO=user@somehost.tld
1 2 * * * /path/to/your/command
আউটপুট নিজেই ক্যাপচার করুন
আপনি stdout এবং stderr একটি ফাইলে পুনর্নির্দেশ করতে পারেন। আউটপুট ক্যাপচারের জন্য সঠিক সিনট্যাক্সটি কী শেল ক্রোন ব্যবহার করছে তার উপর নির্ভর করে ভিন্ন হতে পারে। এখানে দুটি উদাহরণ রয়েছে যা কোনও ফাইলে সমস্ত আউটপুট সংরক্ষণ করে /tmp/mycommand.log
:
1 2 * * * /path/to/your/command &>/tmp/mycommand.log
1 2 * * * /path/to/your/command >/tmp/mycommand.log 2>&1
লগগুলি দেখুন
ক্রোন সিসলগের মাধ্যমে তার ক্রিয়াকলাপগুলি লগ করে, যা (আপনার সেটআপের উপর নির্ভর করে) প্রায়শই যায় /var/log/cron
বা যায় /var/log/syslog
।
প্রয়োজনে আপনি যেমন ক্রোন স্টেটমেন্টগুলি ফিল্টার করতে পারেন
grep CRON /var/log/syslog
এখন যেহেতু আমরা ক্রোন এর মূল বিষয়গুলি অতিক্রম করেছি, ফাইলগুলি কোথায় এবং কীভাবে সেগুলি ব্যবহার করবেন সেগুলি কয়েকটি সাধারণ সমস্যাগুলি দেখি।
ক্রোন চলছে কিনা তা পরীক্ষা করুন
যদি ক্রোন চলমান না থাকে তবে আপনার আদেশগুলি নির্ধারিত হবে না ...
ps -ef | grep cron | grep -v grep
তোমার মতো কিছু পাওয়া উচিত
root 1224 1 0 Nov16 ? 00:00:03 cron
অথবা
root 2018 1 0 Nov14 ? 00:00:06 crond
এটি পুনরায় চালু না হলে
/sbin/service cron start
অথবা
/sbin/service crond start
অন্যান্য পদ্ধতি থাকতে পারে; আপনার ডিস্ট্রো যা সরবরাহ করে তা ব্যবহার করুন।
ক্রোন একটি সীমাবদ্ধ পরিবেশে আপনার কমান্ড চালায়।
পরিবেশের ভেরিয়েবলগুলি কী উপলভ্য তা সম্ভবত খুব সীমাবদ্ধ। সাধারণত, আপনি শুধুমাত্র যেমন হিসাবে সংজ্ঞায়িত কয়েক ভেরিয়েবল, পাবেন $LOGNAME
, $HOME
এবং $PATH
।
নির্দিষ্ট নোট PATH
সীমাবদ্ধ হয় /bin:/usr/bin
। "আমার ক্রোন লিপিটি বিপুল পরিমাণে কাজ করে না" সমস্যাগুলি এই সীমাবদ্ধ পথের কারণে ঘটে । যদি আপনার কমান্ড অন্য কোনও স্থানে থাকে তবে আপনি এটি কয়েকটি উপায়ে সমাধান করতে পারেন:
আপনার কমান্ডের পুরো পথ সরবরাহ করুন।
1 2 * * * /path/to/your/command
ক্রন্টব ফাইলটিতে উপযুক্ত PATH সরবরাহ করুন
PATH=/usr:/usr/bin:/path/to/something/else
1 2 * * * command
যদি আপনার কমান্ডের জন্য অন্যান্য পরিবেশের ভেরিয়েবলের প্রয়োজন হয় তবে আপনি এগুলি ক্রন্টব ফাইলটিতেও সংজ্ঞায়িত করতে পারেন।
ক্রোন cwd == w হোম দিয়ে আপনার কমান্ড চালায়
আপনি যে প্রোগ্রামটি কার্যকর করেন তা ফাইল সিস্টেমের যেখানেই থাকুক না কেন, ক্রোন চলাকালীন প্রোগ্রামটির বর্তমান ওয়ার্কিং ডিরেক্টরি এটি ব্যবহারকারীর হোম ডিরেক্টরি হবে । আপনি যদি আপনার প্রোগ্রামের ফাইলগুলিতে অ্যাক্সেস করেন তবে আপনি যদি আপেক্ষিক পাথগুলি ব্যবহার করেন বা (পছন্দসই) কেবলমাত্র কোথাও পুরোপুরি যোগ্যতাসম্পন্ন-পাথ ব্যবহার করেন এবং প্রত্যেককে পুরোপুরি বিভ্রান্তি থেকে বাঁচাতে পারেন তবে এটিকে অ্যাকাউন্টে নেওয়া দরকার।
আমার ক্রোন্টাবের শেষ কমান্ডটি চলবে না
ক্রোনকে সাধারণত প্রয়োজন হয় যে নতুন লাইন দিয়ে কমান্ড সমাপ্ত করা হবে। আপনার ক্রন্টব সম্পাদনা করুন; লাইনটির শেষ প্রান্তে যান যেখানে সর্বশেষ কমান্ড রয়েছে এবং একটি নতুন লাইন প্রবেশ করান (এন্টার টিপুন)।
ক্রন্টব ফর্ম্যাটটি পরীক্ষা করুন
আপনি / etc / crontab বা /etc/cron.d এর বিপরীতে কোনও ক্রন্টব বিন্যাসিত ক্রন্টব ব্যবহার করতে পারবেন না। একটি ব্যবহারকারী ফর্ম্যাট ক্রন্টব একটি সারির 6th ষ্ঠ অবস্থানে একটি ব্যবহারকারীর নাম অন্তর্ভুক্ত করে না, যখন একটি সিস্টেম বিন্যাসিত ক্রন্টব ব্যবহারকারীর নামটি অন্তর্ভুক্ত করে এবং সেই ব্যবহারকারী হিসাবে কমান্ড চালায়।
আমি একটি ফাইল /etc/cron- এ রেখেছি ourআসাহুলি, দৈনিক, সাপ্তাহিকভাবে, একমাসে - এবং এটি চালায় না
- ফাইলনামটিতে রান-পার্টস দেখতে এক্সটেনশন নেই বলে দেখুন
- ফাইলটির অনুমতি কার্যকর করার বিষয়টি নিশ্চিত করুন।
- আপনার স্ক্রিপ্টটি কার্যকর করার সময় সিস্টেমটি কী ব্যবহার করবেন তা বলুন (যেমন
#!/bin/sh
উপরে রাখুন)
ক্রোন তারিখ সম্পর্কিত বাগগুলি
যদি আপনার তারিখটি সম্প্রতি কোনও ব্যবহারকারী বা সিস্টেম আপডেট, টাইমজোন বা অন্য দ্বারা পরিবর্তিত হয়, তবে ক্রন্টব ভুলভাবে আচরণ শুরু করবে এবং উদ্ভট বাগগুলি প্রদর্শন করবে, কখনও কখনও কাজ করবে, কখনও কখনও নয়। এটি যখন চান নীচে থেকে সময় পরিবর্তন হয় তখন "আপনি যা চান তা করার" চেষ্টা করার ক্রোনটবের চেষ্টা। ঘন্টা পরিবর্তন হওয়ার পরে "মিনিট" ক্ষেত্রটি অকার্যকর হয়ে উঠবে। এই পরিস্থিতিতে, কেবলমাত্র তারাগুলি গ্রহণ করা হবে accepted ক্রোন পুনরায় আরম্ভ করুন এবং ইন্টারনেটে সংযুক্ত না হয়ে আবার চেষ্টা করুন (যাতে তারিখটি কোনও সময় সার্ভারে রিসেট করার সুযোগ পায় না)।
শতকরা লক্ষণ, আবার
শতাংশ লক্ষণ সম্পর্কে পরামর্শের উপর জোর দেওয়ার জন্য, ক্রোন তাদের সাথে কী করে তার একটি উদাহরণ এখানে:
# cron entry
* * * * * cat >$HOME/cron.out%foo%bar%baz
3 লাইন যুক্ত ~ / cron.out ফাইল তৈরি করবে
foo
bar
baz
date
কমান্ডটি ব্যবহার করার সময় এটি বিশেষভাবে অনুপ্রবেশযোগ্য । শতকরা চিহ্ন থেকে বাঁচতে ভুলবেন না
* * * * * /path/to/command --day "$(date "+\%Y\%m\%d")"