এই দুটি ক্রোন চাকরীতে কী সমস্যা?


13

আমি নিম্নলিখিত ক্রোন কাজ সংজ্ঞায়িত আছে।

55  8   *   *   3   /usr/bin/php /home/mark/dev/processes/customClient/events.php > /home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv
0   9   *   *   3   /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s 'Events from `date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`' -a '/home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv'

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


এফওয়াইআই আমি সবেমাত্র ক্রোন জবগুলিকে পছন্দ করেছি এবং নিম্নলিখিত ত্রুটিগুলি পেয়েছি। /bin/sh: 1: Syntax error: EOF in backquote substitution প্রথম ক্রোন কাজের জন্য। /bin/sh: 1: Syntax error: Unterminated quoted string দ্বিতীয় ক্রোন কাজের জন্য।
ডি

2
ব্যাকটিকগুলি এই কারণেই হ্রাস করা হয় ; পরিবর্তন করা $(...)আপনাকে উদ্ধৃত সমস্যাগুলি মোকাবেলায় সহায়তা করবে ...
জেসনওয়ারিয়ান

1
আপনি অবশ্যই আমার একটি প্রশ্ন পরীক্ষা করতে চান। এটিতে স্টিফেন চেজেলাসের একটি উত্তর রয়েছে যা আপনাকে ব্যাখ্যা করে যে আপনি কীভাবে একটি ক্রিয়াঘটিত শেল তৈরি করতে পারবেন যা আপনার ক্রোন জব দেখতে পাবে এমন পরিবেশের অনুরূপ। যদি আপনি তার সামান্য পদ্ধতিটি অনুসরণ করেন তবে আপনি একটি প্রম্পট পাবেন এবং আপনি ক্রোনজব ধাপে ধাপে পরীক্ষা করতে পারেন এবং এটি কোথায় ব্যর্থ হয় তা দেখতে পারেন। unix.stackexchange.com/a/56503/16841 নিশ্চিত যে এটি আপনার প্রশ্নের জন্য 100% মিল নয়, তবে এটি ক্রন্টব সমস্যাগুলি সমাধানে আপনাকে সহায়তা করতে পারে।
জিপ্পি

উত্তর:


14

আমি দৃ reasons়ভাবে যে কোনও অ-তুচ্ছ ক্রোন কাজ তাদের নিজস্ব শেল স্ক্রিপ্ট ফাইলে রাখার পরামর্শ দিচ্ছি, অনেক কারণে:

  • ডিবাগ করা সহজ: আপনি লম্বা লাইন পেস্ট করার পরিবর্তে স্ক্রিপ্টটি চালাতে পারেন এবং ডান শেবাং লাইনের সাহায্যে ক্রোনট্যাবটিতে সরাসরি একই কমান্ড থাকলে আপনি তার চেয়ে অনেক বেশি অনুমান করে
  • পড়তে সহজ: এটিকে 200+ চরিত্রের ওয়ান-লাইনার তৈরি করার দরকার নেই, আপনি এটিকে সুন্দরভাবে ফর্ম্যাট করতে পারেন তাই প্রত্যেকের পক্ষে পড়া এবং বোঝা সহজ
  • স্ক্রিপ্টটি সংস্করণ নিয়ন্ত্রণে যুক্ত করুন

8
এবং %স্ক্রিপ্টে cronসমস্যাযুক্ত চরিত্রগুলি স্থাপন করা এগুলিকে নতুন লাইনে রূপান্তরিত করা থেকে বিরত রাখবে যা আপনার আসল সমস্যা।
ইয়ান ডি অ্যালেন

আমি একমত নই আপনি কোন স্ক্রিপ্টটি করে তা ভুলে যাওয়ার ঝোঁক। আমি অভিজ্ঞতা থেকে কথা বলছি।
শ্রীধর সারনোবাত

30

ক্রোন জব কমান্ডের জন্য সরাসরি ইন্টারেক্টিভ শেলটিতে টাইপ করা কমান্ডের সাথে তুলনামূলকভাবে সাধারণ আচরণের জন্য আলাদাভাবে আচরণ করার জন্য তিনটি সাধারণ কারণ রয়েছে:

  • ক্রোন সীমিত পরিবেশ সরবরাহ করে, যেমন, একটি সর্বনিম্ন $PATHএবং অন্যান্য প্রত্যাশিত ভেরিয়েবলগুলি অনুপস্থিত।
  • ক্রোন /bin/shডিফল্টরূপে প্রার্থনা করে, আপনি হয়ত অন্য কিছু শেল ইন্টারেক্টিভভাবে ব্যবহার করতে পারেন।
  • ক্রোন %চরিত্রটি বিশেষভাবে আচরণ করে (এটি কমান্ডের একটি নতুন লাইনে রূপান্তরিত হয়)।
  • ক্রোন কোনও টার্মিনাল বা গ্রাফিকাল পরিবেশ সরবরাহ করে না।

আপনার অবশ্যই সমস্ত %অক্ষর \একটি ক্রন্টব ফাইলের সাথে অবশ্যই আগে রয়েছে , যা ক্রোনকে কমান্ডটিতে মাত্র একটি শতাংশ রাখতে বলেছে। মনে রাখবেন আপনি যখন dateক্রোন কাজের ক্ষেত্রে কমান্ডটি ব্যবহার করবেন ।

55  8   *   *   3   /usr/bin/php /home/mark/dev/processes/customClient/events.php > "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
0   9   *   *   3   /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s "Events from $(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d)" -a "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"

আমি কিছু উদ্ধৃতি সমস্যাগুলিও ঠিক করেছি:

  • এটি আপনাকে সুশৃঙ্খলতা ব্যতীত অন্য কোনও সমস্যা সৃষ্টি করে না, তবে আপনার কমান্ড প্রতিস্থাপনের জন্য ব্যাকটিক্স ব্যবহার করা উচিত নয়। $(…)পরিবর্তে ব্যবহার করুন: এর পার্সিং বিধিগুলি সহজ।
  • ভেরিয়েবল এবং কমান্ড বিকল্পের চারপাশে সর্বদা ডাবল উদ্ধৃতি ব্যবহার করুন: "$somevariable", "$(somecommand)"। এখানে উদ্ধৃতিগুলির অভাব নিরীহ ছিল কারণ dateকমান্ডটি আপনি যে ফর্ম্যাটগুলি ব্যবহার করেছিলেন তার জন্য কোনও বিশেষ চরিত্র ফেরত দেয়নি, তবে আপনাকে অবশ্যই সাবধানে মনে রাখতে হবে কোন অক্ষরগুলি বিশেষ and এটিকে সহজ রাখুন, যদি না আপনি ফলাফলটি ক্ষেত্রের বিভাজন এবং ফাইলের নাম তৈরি করতে চান তবে ডাবল উদ্ধৃতি ব্যবহার করুন।
  • কিছু কমান্ড বিকল্পের চারপাশে সম্প্রসারণ রোধ করার জন্য আপনার কয়েকটি সিঙ্গল কোট ছিল। পরিবর্তে ডাবল উদ্ধৃতি ব্যবহার করুন।

0

আপনি নেস্টেড হয়েছে বলে মনে হচ্ছে 'muttকমান্ড প্রয়োগ করুন:

'ইভেন্টগুলি date +%Y-%m-%d --date='last Wednesday'- date +%Y-%m-%d'

"অভ্যন্তরের পরিবর্তে ব্যবহার করার চেষ্টা করুন 'যাতে বিবৃতিটি পড়ে

'ইভেন্টগুলি date +%Y-%m-%d --date="last Wednesday"- date +%Y-%m-%d'


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