স্ক্রিপ্টের মাধ্যমে বুটে বৈশ্বিক পরিবেশের ভেরিয়েবলগুলি কীভাবে সেট করবেন এবং লগ-ইন করার আগে চলতে থাকা কোনও অ্যাপ্লিকেশনের জন্য সেগুলি পাওয়া যায়?


17

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

তদ্ব্যতীত, স্ক্রিপ্টটি পরিষেবাটি চালুর পরে আবার একটি স্ক্রিপ্ট কল করে যা আমার কাছে থাকা একটি অ্যাপ্লিকেশন শুরু করে। এই অ্যাপ্লিকেশনটির সেই পরিবেশের ভেরিয়েবলগুলির অ্যাক্সেস দরকার।

আমি এটি চালিত আরএইচইএল সিস্টেমটি ব্যবহারকারীর দ্বারা কখনই লগইন করা উচিত নয়, এটি কেবল বুট হয়ে যায় এবং অ্যাপ্লিকেশনটি শুরু করে। আমি জানি একটি পিতা বা মাতা প্রক্রিয়ার জন্য যে পরিবেশের / শেল করতে পারবে না সত্যিই একটি শিশু পটভূমি প্রক্রিয়া শেল যদিও দ্বারা সেট করা যেতে।

আমার স্ক্রিপ্টের মাধ্যমে এটি করার জন্য আমার একটি উপায় প্রয়োজন যা আমার পরিষেবাতে ডেকে আনা হয় (যদিও ব্যাকগ্রাউন্ডে আবশ্যক নয়), সেগুলি আমার সেবারে যুক্ত করে না (যা আমার পক্ষে কাজ করে না) এবং না /etc/environmentবা কোনও স্টোরেজ করে নয় .profileবা যে যেমন কিছু।

আমার পরিষেবাতে আমি পরিবেশের ভেরিয়েবলগুলি যুক্ত করার চেষ্টা করেছি (যদিও আমি এটি করতে চাই তা নয়):

    export TEST=192.168.1.1

আমি আমার সেবায় এটিও চেষ্টা করেছি:

    TEST=192.168.1.1
    export TEST=${TEST}

আমি পরিবর্তন করার চেষ্টা করেছি যে কীভাবে আমার পরিষেবা বাশ স্ক্রিপ্টটিকে কল করে:

    /bin/asdf/script &

আমিও স্ক্রিপ্ট গুন চেষ্টা যাতে এটি একই শেল (যা আমি থেকে পেয়েছেন রান এই ):

    . ./bin/asdf/script
    #I'm very confused why this didn't work

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

উত্তর:


12

ভেরিয়েবলগুলি সংগ্রহ করার জন্য আপনি কোনও স্ক্রিপ্ট স্থাপনের চেষ্টা করতে পারেন /etc/profile.d/

উদাহরণ:

/etc/profile.d/somescript.sh

#!/bin/bash
TEST=$(cat /var/somefile)
export $TEST

/etc/profileএমন কোনও কল করে যা এতে কোনও স্ক্রিপ্ট চালাবে /etc/profile.d/এবং এটি রুট সহ সিস্টেমের সমস্ত ব্যবহারকারীর জন্য প্রযোজ্য।


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

আমার ধারণা আমি পরিষেবাতে সেট করা পরিবর্তনশীলগুলির উপর নির্ভরতা থেকে মুক্তি পেতে পারি। এই ক্ষেত্রে, আমি মনে করি এটি কার্যকর হবে, যতক্ষণ না পরিষেবাটি শুরুর আগে স্ক্রিপ্টটি চালিত হয়। আপনি কি জানেন কখন লগইন শেল শুরু হয়? অথবা লগইন শেলটি শুরু হয়ে গেলে কি আমি নিয়ন্ত্রণ করতে পারি? আমার রান স্তরের জন্য rcX.d ডিরেক্টরিতে এর জন্য আমার কোনও পরিষেবা নেই।
sqenixs

1

অন্য কোনও প্রক্রিয়াটির পরিবেশকে প্রভাবিত করার কোনও প্রক্রিয়া নেই। প্রক্রিয়াগুলি কেবল তাদের শিশু প্রক্রিয়াগুলির পরিবেশকে প্রভাবিত করে।

সুতরাং আপনার প্রয়োজনীয় অ্যাপ্লিকেশনগুলির পূর্বপুরুষের মধ্যে এই পরিবেশের পরিবর্তনশীলগুলি সেট করতে হবে। আপনার পরিষেবাটি পৃথকভাবে পরিবেশ-সেটিং ব্যাশ স্ক্রিপ্ট এবং অ্যাপ্লিকেশনটি আহ্বান না করে আপনার পরিষেবাদিতে একটি ব্যাশ স্ক্রিপ্ট প্রার্থনা করুন যা পরিবেশের ভেরিয়েবল সেট করে তার পরে অ্যাপ্লিকেশনটি চালু করে।

#!/bin/bash
. /path/to/environment/variable/setter.bash
exec /path/to/application

আমি অনলাইনে যা পড়েছি সেখান থেকে হ্যাকগুলি রয়েছে (যদিও কোনও উত্স স্ক্রিপ্টে ওয়াল দিয়ে কিছু করার, বা জিডিবি ব্যবহার করে) এটি কাজ করার জন্য। ব্যাকগ্রাউন্ডে থাকার বিষয়ে আমি অত্যধিক আগ্রহী নই, যদি আমি বর্তমান "শেল" -তে কমান্ডগুলি চালাতে পারি (আপনার পরিষেবাটি কার্যকর হওয়ার সময় আপনি কি বুটের সময় শেলের মধ্যে থাকেন?) তবে এটিও ঠিক হয়ে যাবে।
sqenixs

দুর্ভাগ্যক্রমে, আমি পরিষেবাটি থেকে অ্যাপ্লিকেশনটি শুরু করতে পারি না, কারণ অনেকগুলি বিভিন্ন প্রক্রিয়া শুরু হয়েছে এবং অ্যাপ্লিকেশন শুরুর স্ক্রিপ্ট থেকে কনফিগার করা জিনিসগুলি রয়েছে এবং তাদের অবশ্যই আইএর জন্য পরিষেবা থেকে আলাদা রাখতে হবে।
sqenixs

@ সেকেনিক্স একটি শেল অন্য প্রক্রিয়ার মতো একটি প্রক্রিয়া। "খোলের মধ্যে থাকা" এর মতো কোনও জিনিস নেই। আপনি যখন "সোর্স স্ক্রিপ্টে ইওল" কথা বলছেন, এটি এমন একটি প্রোটোকল যেখানে কোনও প্রোগ্রাম (যা শেল স্ক্রিপ্ট নাও হতে পারে) শেল সিনট্যাক্সের সংজ্ঞাগুলি মুদ্রণ করে এবং একটি শেল স্ক্রিপ্ট তাদের ব্যাখ্যা করে। জিডিবি দিয়ে পরিবেশের ভেরিয়েবলগুলি সেট করা কাজ করতে পারে, বা এর কোনও প্রভাব থাকতে পারে না, বা এটি আপনার অ্যাপ্লিকেশনটিকে ক্র্যাশ করতে পারে; যেমনটি আপনি কল্পনা করতে পারেন, উত্পাদনে একটি ডিবাগার ব্যবহার করার পরামর্শ দেওয়া হয় না (এবং আবারও, সঙ্গত কারণেই)।
গিলস 8'৩

আপনার সমস্যার সমাধান সম্ভবত আছে তবে আপনার প্রয়োজনীয়তার সাথে আপনার আরও সুনির্দিষ্ট হওয়া দরকার। আপনার প্রশ্নে, আপনি লিখেছেন "স্ক্রিপ্টটি পরিষেবাটি চালনার পরে অন্য অ্যাপ্লিকেশন শুরু করে এমন অন্য স্ক্রিপ্টকে কল করে"। সুতরাং আপনার কাছে একটি সমাধান রয়েছে বলে মনে হচ্ছে: অন্যান্য স্ক্রিপ্টের মধ্যে পরিবেশের ভেরিয়েবলগুলি সেট করুন। তবে তারপরে একটি মন্তব্যে আপনি লিখেছেন যে আপনি "পরিষেবাটি থেকে অ্যাপ্লিকেশন শুরু করতে পারবেন না"। তো, এটি কোনটি?
গিলস 'অসমাপ্ত হওয়া বন্ধ করুন'

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