আমি একটি init.d স্ক্রিপ্ট সম্পাদনা করছি। Init.d স্ক্রিপ্টটি একটি ইউটিলিটি স্ক্রিপ্ট চালায় যা তারপরে একটি প্রক্রিয়া চালায়। উভয় বাশ স্ক্রিপ্ট থেকে আমি কীভাবে এটি নির্দিষ্ট ব্যবহারকারী এবং গোষ্ঠী হিসাবে প্রধান প্রক্রিয়াটি চালু করব?
আমি একটি init.d স্ক্রিপ্ট সম্পাদনা করছি। Init.d স্ক্রিপ্টটি একটি ইউটিলিটি স্ক্রিপ্ট চালায় যা তারপরে একটি প্রক্রিয়া চালায়। উভয় বাশ স্ক্রিপ্ট থেকে আমি কীভাবে এটি নির্দিষ্ট ব্যবহারকারী এবং গোষ্ঠী হিসাবে প্রধান প্রক্রিয়াটি চালু করব?
উত্তর:
সহজ উপায়টি হল su (1) কমান্ডটি ব্যবহার করা, এটির একটি বিকল্প রয়েছে যা আপনাকে ব্যবহারকারীর শেলের মাধ্যমে একটি কমান্ড চালানোর অনুমতি দেয়, উদাহরণস্বরূপ:
su foo -c ls
এটি ব্যবহারকারী foo এ স্যুইচ করবে এবং ls কমান্ড চালাবে। আপনি যে ব্যবহারকারীর ব্যবহার করতে চান তার যদি একটি বৈধ শেল না থাকে (যেমন এটি / ইত্যাদি / শেলগুলিতে নয়, যেমন / বিন / মিথ্যা বা / এসবিন / নোলোগিন) আপনার কমান্ড লাইনে একটি শেলও নির্দিষ্ট করতে হবে। আউটপুট সহ উদাহরণ:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &আমি su www-dataসমস্ত ত্রুটি সেট করে এটি চালিয়ে গেলে একটি ত্রুটি পাই ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &। কিভাবে আমি এই সমাধান?
suএকটি একক যুক্তি নেয় যা শেল কমান্ড। আপনাকে লিখতে হবে su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"', এবং তা নিশ্চিত করতে হবে MONOSERVERএবং WEBAPPSপিতামাত শেল দ্বারা রফতানি করা দরকার। (দ্রষ্টব্য: su … -c "$MONOSERVER …"ভেরিয়েবলগুলির মধ্যে যদি শেল বিশেষ অক্ষর থাকে তবে এটি ব্যর্থ হবে না )) এবং আপনার যদি ডেডিকেটেড ডেমন লঞ্চার যেমন থাকে তবেstart-stop-daemon এটি ব্যবহার করুন।
যদি start-stop-daemonআপনার সিস্টেমে উপলভ্য থাকে আপনার সম্ভবত এটি ব্যবহার করা উচিত এবং এর বিকল্পগুলির দিকে নজর দেওয়া উচিত (বিশেষত -uএবং -gএই ক্ষেত্রে)।
(অন্যথায়, আপনি suএবং এর সংমিশ্রণটি ব্যবহার করতে পারেন sg))
আপডেট: এখানে কিছু /etc/init.d/mpdস্ক্রিপ্ট থেকে নেওয়া উদাহরণ (যা ব্যবহার করে start-stop-daemon):
কমান্ড শুরু করুন:
echo "Starting Music Player Daemon"
start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
--pidfile /var/run/mpd.pid --make-pidfile \
-- --no-daemon /etc/mpd.conf 2>/dev/null
এরপরে যা কিছু --আসে তা /usr/bin/mpdপ্রোগ্রামের নিজস্ব একটি যুক্তি । (ডেমোনাইজেশন পদ্ধতিটি স্টার্ট-স্টপ-ডেমন স্ক্রিপ্ট দ্বারা যত্ন নেওয়া হয় তাই mpdএটি সম্পর্কে যত্ন নেওয়ার জন্য বলা হয় না --nodaemon))
কমান্ড বন্ধ করুন:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
যদি mpdনিজে বিশেষাধিকার ড্রপ করা হয় নি, এক (উদাহরণস্বরূপ) যোগ করতে হবে -u mpd, -g mpdকরতে অনেক বিকল্প start-stop-daemonকমান্ড।
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
Usage: su [options] [LOGIN]এবংsu: unrecognized option '--debug'