ক্রোন থেকে একটি শ স্ক্রিপ্ট কার্যকর করা হচ্ছে


12

আমার একটি টেস্ট.শ স্ক্রিপ্ট রয়েছে

#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh

যখন আমি কমান্ড লাইন থেকে রুট হিসাবে ফাইলটি কার্যকর করি এটি কাজ করে।

sh /home/v/test.sh 

যখন আমি এটি ক্রন্টাব-এ সেট করি (মূল ক্রোন হয়), কাজ করে না

 * * * * * sh /home/v/test.sh

আমি ভুল কি করবেন? ধন্যবাদ


"কাজ করছে না" কাজ করছে না। দেখা? তুমি কি জানো না আমি কি বলতে চাচ্ছি, এবং likewiese আমরা জানি না আপনি কি বলতে চাইছেন। মানে (হ্যাঁ) কি কাজ করছে না? কিছু সম্পর্কে হতে পারে। Tmow হতে এর গেল অনুমান সঠিক, কিন্তু এটি শুধুমাত্র একটি অনুমান (এবং বেশ ভাল এক আমি মনে করি, কিন্তু এখনও) আছে।
জার্জেন এ। এয়ারহার্ড

হ্যাঁ, আপনি কি ফলাফল দেখা হয় আরো নির্দিষ্ট হতে পারেন, তাহলে আমরা ভাল নির্ধারণ করতে কি সমস্যা হয় সক্ষম হবে। অর্থাৎ, আপনি "কাজ না করা" বলতে কি বোঝায় (:
গ্যাবে।

আমি syslog- র কোনো লগ দেখুন, এবং স্ক্রিপ্ট একটি ডিবি যা ঘটছে নেই মধ্যে কিছু টিপে করছেন, এবং তারা হলো যদি আমি হাত দ্বারা স্ক্রিপ্ট চালানো।
এলজো ভালুগি

উত্তর:


15

লোকটির মতে:

ক্রন ডেমন আপনার হোম ডিরেক্টরি থেকে একটি subshell শুরু হয়। আপনি যদি একটি কমান্ড নির্দিষ্ট সময় নির্ধারণের যখন আপনি লগইন নেই চালানোর জন্য এবং আপনি চালানোর জন্য আপনার .profile ফাইলে কমান্ড চান, কমান্ড স্পষ্টভাবে আপনার .profile ফাইল পড়তে হবে।

ক্রন ডেমন যে শেল জন্য একটি ডিফল্ট পরিবেশ সরবরাহ, সংজ্ঞা হোম, LOGNAME, শেল (= / usr / bin / SH),
এবং পাথ (=, / usr / বিন)।

সুতরাং ক্রন ডেমন জানে না সে কোথায় পিএইচপি এবং আপনি হাত দ্বারা পূর্ণ পিএইচপি পাথ নির্দিষ্ট করা উচিত, উদাহরণস্বরূপ (আমি তোমার আসল পিএইচপি পথ জানি না):

#!/bin/sh
/usr/local/bin/php /home/v/file.php
sh /root/x/some.sh

অন্য একটি উপায় হ'ল / ইত্যাদি / প্রোফাইল (বা আপনার। প্রোফাইল / .bashrc) উত্স, উদাহরণস্বরূপ

* * * * * . /home/v/.bashrc ; sh /home/v/test.sh

আপনার .bashrc এনভায়রনমেন্ট ভেরিয়েবল সেট হলে এই বিকল্পটি সহায়ক যে আপনি প্রয়োজন (অর্থাত পথ)

সম্পাদনা

"একটি উত্সাহব্যঞ্জক পড়া : ক্রন করার ইন্ট্রো নবাগত ", না উপাধি থেকে নিবন্ধ তুচ্ছ বলিয়া গণনা আসলে এটা ভাল আপনার প্রশ্নের সম্পূর্ণ উত্তর পুরোপুরি লেখা (এটা সবার জন্য একটি পড়া হচ্ছে) না,:

...
পাথ ডিরেক্টরি যা ক্রন যেমন জন্য অনুসন্ধান পাথ করা হবে যদি আপনি / usr / দন্তযুক্ত / বিন মধ্যে একটি প্রোগ্রাম 'foo বিন্যাস' পেয়েছেন রয়েছে, / usr / দন্তযুক্ত / bin এ যোগ মূল্য হতে পারে পাথ, যেমন আপনি 'foo বিন্যাস' প্রত্যেক সময়ে কল করতে চান পূর্ণ পথ ব্যবহার করতে থাকার করা বন্ধ করবে।
...


খারাপ $ পথ যা হাতে কাজ, কিন্তু না ক্রন থেকে স্ক্রিপ্ট সবচেয়ে সাধারণ কারণ।
প্যাট্রিক

@ পেট্রিক অবশ্যই ক্রোনটি পিএইচপি কোথায় রয়েছে তা যদি না জানে তবে এটি একটি সমস্যা, অন্যথায় এলজো ক্রোনটব কোনও সমস্যা ছাড়াই কাজ করবে, এটি অবশ্যই একটি পথ সমস্যা হবে।
টমো

ধন্যবাদ আপনার উত্তরের জন্য অনেক। এটি খুব সহজেই আমার জন্য কাজ করেছে !!! .. অনেক ধন্যবাদ @ মম!
বিগনেশ প্রজাপতি

5

কমান্ডগুলি টার্মিনালে টাইপ করার সময় চারটি সাধারণ কারণ রয়েছে তবে ক্রোন থেকে নয়, সাধারণতার জন্য:

  1. ক্রোন সীমিত পরিবেশ সরবরাহ করে, যেমন, একটি সর্বনিম্ন $PATHএবং অন্যান্য প্রত্যাশিত ভেরিয়েবলগুলি অনুপস্থিত।
  2. ক্রন পূজা / বিন / ডিফল্টরূপে SH, আপনি যেহেতু ইন্টারেক্টিভ কিছু অন্যান্য শেল ব্যবহার করতে পারেন।
  3. ক্রোন% চরিত্রটিকে বিশেষভাবে আচরণ করে (এটি কমান্ডে একটি নতুন লাইনে রূপান্তরিত হয়)।
  4. ক্রন প্রান্তিক বা গ্রাফিক্যাল পরিবেশে প্রদান করে না।

যদি আপনার কাজ ত্রুটি বার্তা সহ কোনও আউটপুট উত্পাদন করে তবে ক্রোন আপনাকে পুরো আউটপুট সহ ইমেল প্রেরণ করে। নিশ্চিত হয়ে নিন যে আপনি স্থানীয়ভাবে প্রাপ্ত মেলটি পড়েছেন বা আপনার পড়া কোনও ঠিকানায় এটি ফরোয়ার্ড করেছেন। স্থানীয় অ্যাকাউন্ট থেকে অন্য কোনও ঠিকানায় মেইল ​​ফরোয়ার্ড করতে অন্য ঠিকানাটি putোকান ~/.forward। যদি ক্রোন জবটি সিস্টেম ব্যবহারকারী হিসাবে চলমান থাকে ( root,, webmaster…), নিশ্চিত হয়ে নিন যে ব্যবহারকারীর মেইলটি আপনার (এবং অন্য কোনও প্রশাসক) আপনাকে পুনঃনির্দেশিত করেছে; সবচেয়ে মেইল স্থাপনার সঙ্গে, মত লাইন করা root: elzoমধ্যে /etc/aliases


2

/ বিন: ক্রন ডেমন সাধারণত একটি শেল যেখানে পাথ এনভায়রনমেন্ট ভেরিয়েবল কিছু সিস্টেম ডিফল্ট অবধি সীমিত থাকবে, যেমন, / usr / বিন আপনার কমান্ড সঞ্চালন করে।

সম্ভবত, আপনার phpকমান্ড উপলব্ধ নেই, / usr / bin অথবা / বিন এবং এইভাবে স্ক্রিপ্ট ব্যর্থ যখন ক্রন মাধ্যমে মৃত্যুদন্ড কার্যকর করা এবং সফল রান যখন না।

ক্রোন সাধারণত রুট ব্যবহারকারীর কাছে একটি মেইলের মাধ্যমে ত্রুটি বা চাকরীর বার্তাগুলির প্রতিবেদন করে (যেমন কোনও কমান্ড যখন প্রস্থান স্থিতি ফিরে আসে! = 0 বা কাজ শেষ হওয়ার পরে stdout / stderr এ আউটপুট উত্পাদন করে)।

আপনার সিস্টেমে নির্ভর করে আপনি সেটআপ স্থানীয় মেল বিতরণে করা আছে এই বার্তাগুলি জন্য।

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