উত্তর:
যদি আপনার fooকাছে কোনও ফাইল ফাইল তৈরি / লেখার চেষ্টা করা থাকে তবে fooবাইনারিগুলির অনুমতিগুলি বিবেচনা করে না, তবে ব্যবহারকারী যেভাবে এটি চালিয়ে যাচ্ছেন তা সমস্ত পার্থক্য করে।
এই ক্ষেত্রে, fooলেখার চেষ্টা করা হচ্ছে /var/run, যা মালিকানাধীন rootএবং কেবল রুট দ্বারা লিখনযোগ্য ।
সুতরাং আপনাকে sudo fooপিআইডি ফাইলটি তৈরি করার জন্য প্রোগ্রামটি চালাতে হবে। আপনি কোনও প্রোগ্রাম করার আগে রুট হিসাবে চালানোর অনুমতি দেওয়ার সুরক্ষা সম্পর্কিত প্রভাবগুলি বিবেচনা করুন ...
/var/run
সাধারণ পদ্ধতি: ফাইলটি অ্যাক্সেস করার চেষ্টা করে প্রক্রিয়াটির ব্যবহারকারী এবং গোষ্ঠী নির্ধারণ করুন। এটি প্রায়শই সফ্টওয়্যারটির কনফিগারেশনে পাওয়া যায় (যেমন ওয়েবসার্ভার / মেইল সার্ভার / ...) তবে সফ্টওয়্যারটি ইতিমধ্যে চললে এটি ব্যবহার করুন:
ps aux
আপনি যে প্রক্রিয়াটির জন্য অ্যাক্সেসের অধিকারগুলি কনফিগার করতে চান তা দেখুন। প্রথম কলাম আপনাকে জানায় যে এটি কোন ব্যবহারকারীর নামে চলছে।
groups <username>
এটি আপনাকে বলবে যে ব্যবহারকারী কোন গ্রুপের অন্তর্ভুক্ত।
পরিষেবাটির সাথে মেলে ফাইলের মালিক বা গোষ্ঠী পরিবর্তন করুন।
নোট 1: যেহেতু প্রশ্নটি ইঙ্গিত করে যে ফাইলটি / ভার্ / রানে রয়েছে / আমি ধরে নিচ্ছি যে কেবলমাত্র একটি প্রক্রিয়া অ্যাক্সেসের প্রয়োজন, যদি এটি সত্য না হয় তবে আপনার মালিক বা গোষ্ঠী পরিবর্তন করা উচিত নয়, তবে আপনি প্রক্রিয়াটি যুক্ত করার কথা বিবেচনা করতে পারেন এই গোষ্ঠীতে ব্যবহারকারী বা এই ফাইল / ফোল্ডারের জন্য একটি নতুন গোষ্ঠী তৈরি করুন।
দ্রষ্টব্য 2: মজার জিনিস অ্যাপোর্মারের সাথে ঘটতে পারে, এটি একটি সুরক্ষা ব্যবস্থা: এটি ফাইল এবং ফোল্ডারগুলিতে তাদের সমস্ত প্রয়োজনীয় অধিকারগুলি (ফাইল সিস্টেম স্তরে) লেখা থেকে প্রক্রিয়াগুলি আটকাতে পারে। সঙ্গে aa-statusআপনি দেখতে পারেন কিনা আপনার পরিষেবার জন্য একটি নির্দিষ্ট নিয়ম সক্রিয়।
আমি যা করেছি তা হ'ল স্টার্ট-স্টপ-ডিমন নির্বাহের ঠিক আগে একটি ফোল্ডার তৈরি করা। এটি কাজ করে কারণ স্ক্রিপ্টটি সাধারণত শুরু করার সময় রুট হিসাবে কার্যকর হয়। এটি কেবল / var / run ফোল্ডারটি তৈরি করে এবং তাত্ক্ষণিকভাবে মালিককে পরিবর্তন করে, যাতে একটি পিআইডি লেখা যায়।
নীচের উদাহরণে, আমি / var / রানের সাবফোল্ডারটির অস্তিত্ব পরীক্ষা করে দেখি যেখানে আমি বর্তমান রান ব্যবহারকারী হিসাবে পিআইডি রেখেছি, এই ক্ষেত্রে ব্যবহারকারী 'পাই' (যেহেতু আমি রাস্পবেরিতে আছি)।
এই লিঙ্কটিও পরীক্ষা করুন যেহেতু এটি আমার কাছে অত্যন্ত শিক্ষামূলক ছিল: পরিষেবা হিসাবে চালিত করার জন্য পাইথন স্ক্রিপ্ট , তবে এটি এখানে আলোচিত সমস্যাটি আবৃত করে না।
আমার শেল স্ক্রিপ্টের উদাহরণ অংশ:
# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/power/$DAEMON_NAME.pid
do_start () {
log_daemon_msg "Starting system $DAEMON_NAME daemon"
if [ ! -d /var/run/power ]; then
mkdir /var/run/power/
chown pi:pi /var/run/power/
fi
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chdir $DIR --startas $DAEMON -- $DAEMON_OPTS
log_end_msg $?
}