সরাসরি স্ক্রিপ্ট কল করার পরিবর্তে সুপারভাইজারে `bash -c` ব্যবহার করবেন কেন?


11

আমি supervisordআমার সার্ভারে পরিষেবাগুলি নিয়ন্ত্রণ করতে ব্যবহার করতে শুরু করছি । আমি লিনাক্সের প্রো প্রো ব্যবহারকারী নই তবে এটি বেশ ভালভাবে পেতে এবং এটি চালিয়ে যেতে পারি।

কৌতূহলের মাত্র বাইরে, আমি লক্ষ্য করেছি যে সুপারভাইজারের বেশিরভাগ কমান্ডকে এই বলে মনে হয়:

[program:install]
command=bash -c "/src/etc/install.sh"

আমি বাশের লোকটি পড়েছি এবং জানি যে -cস্ট্রিংয়ের পরে পাস করা ভেরিয়েবল সন্নিবেশ করানোর জন্য এটি ব্যবহার করা উচিত।

সুতরাং bash -cস্ক্রিপ্টটি সরাসরি কল করার পরিবর্তে তত্ত্বাবধায়ক (বা অন্য কোনও স্থান) ব্যবহার করার কী লাভ আছে (নীচের উদাহরণের মতো), বিবেচনা করুন যে যেখানে কোনও ভেরিয়েবল পাস / ব্যবহৃত হয়নি?

[program:install]
command=/src/etc/install.sh

ধন্যবাদ!

উত্তর:


11

শেল পথনাম সম্প্রসারণ (যেমন অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে *, ?), কমান্ড তালিকা ( ;, &&, ||), ফেরৎ ( <, >, |,) supervisord দ্বারা বাস্তবায়িত হয় না যে শুধুমাত্র যুক্তি স্ট্রিং একটি অ্যারে মধ্যে কমান্ড splits।

bash -cশুধু ব্রতী ব্যবহারকারী কমান্ড এ ধরনের বৈশিষ্ট্য ব্যবহার করতে প্রলুব্ধ হতে পারে জন্য একটি সহায়তা করা যেতে পারে। উদাহরণস্বরূপ এটি আশ্চর্য এড়ায়

command=echo foo > /tmp/bar

আউটপুট foo > /tmp/barপরিবর্তে লেখার fooজন্য /tmp/bar

-cভেরিয়েবলের সাথে সামান্য কিছু করার আছে। ব্যাশ কোন অতিরিক্ত আর্গুমেন্ট কেবলমাত্র স্ক্রিপ্ট আর্গুমেন্ট হিসাবে পাওয়া যাবে $0, $1, কমান্ডে ইত্যাদি, কিন্তু যে বৈশিষ্ট্য কদাপি কোনো ব্যবহার আছে। উদাহরণস্বরূপ bash -c 'echo $0 $0' fooআউটপুট foo foo


1
ধন্যবাদ, এটি একটি অত্যন্ত বাস্তব উত্তর ছিল এবং এটি সম্ভবত আমার অনেক সময় সাশ্রয় করবে। আমি, একজন শিক্ষানবিস ব্যবহারকারী হিসাবে, এই ভুলটি করব (এবং bash -cসমাধান হিসাবে কখনও ভাবেন না !)।
ড্যানিয়েল কোস্টার

6

ডকুমেন্টেশনে এটি ব্যাখ্যা করা হয়েছে :

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

এই সমস্যাটি প্রায় পেতে bash -cব্যবহার করা যেতে পারে।


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