কোনও ব্যবহারকারী ডিমন হিসাবে একটি মূল সিস্টেম ব্যবহার না করে আমি কীভাবে একটি সিস্টেমড পরিষেবা সেটআপ করব?


20

আমি সবেমাত্র আমার আর্চ-লিনাক্স সিস্টেমে সিস্টেমে ইনস্টল এবং সেটআপ প্রক্রিয়াটি শেষ করেছি (২০১২.০৯.০7) আমি আনইনস্টল initscriptsকরেছি (এবং কনফিগারেশন ফাইলগুলি সরিয়ে নিয়েছি )।

আমি যা করতে চাই তা হ'ল একটি পরিষেবা তৈরি করা যা কোনও অ-রুট ব্যবহারকারী দ্বারা শুরু করা এবং বন্ধ করা যায়। পরিষেবাটি বিচ্ছিন্ন স্ক্রিন সেশনটি চালানো শুরু করে। তবে আমি চাই সিস্টেমের প্রতিটি ব্যবহারকারী যারা এই পরিষেবাটি চালু করেছেন (সক্ষম) করেছেন তাদের জন্য একটি বিশেষ উদাহরণটি বিশেষভাবে শুরু করা হোক। কেউ কীভাবে এই কাজটি করবে?

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

আমি সিস্টেমের জন্য যে পরিষেবা ফাইলটি ব্যবহার করেছি:

[Unit]
Description=rTorrent

[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent

আপডেট # 1 :

ম্যান পেজগুলি এখানে এবং এখানে পড়ার পরে , আমি বুঝতে পারি যে সিস্টেমড কীভাবে আরও ভালভাবে কাজ করে। বিশেষত: User=এবং WorkingDirectory=বিকল্পগুলি ব্যবহার করে কোনও ব্যবহারকারীর সেশনে পরিষেবাটি শুরু করার অনুমতি দেয়। তবে বিষয়টি এখনো যে ব্যবহারকারী নিজেদের পারব না থাকে start, stop, enable, অথবা disableসেবা। একটি অ্যাক্সেস অস্বীকার ত্রুটি দ্বারা দেওয়া হয় systemctl

আপডেট # 2 :

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

মনে হচ্ছে ডিবিসের বর্তমান সংস্করণে একটি বাগ রয়েছে (১..4.৪-১) এতে পরিবেশের পরিবর্তনশীল DBUS_SESSION_BUS_ADDRESSঅর্থ সেট করা হয়নি যার systemctl --userসাথে কমান্ড ত্রুটিগুলি ব্যবহার করে :

Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

ভেরিয়েবলটি দেখতে এইরকম হওয়া উচিত:

DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"

যেখানে USERID প্রদত্ত ব্যবহারকারীর ইউআইডি হওয়া দরকার।


আমি বুঝতে পারি যে একজন ব্যবহারকারী প্রতি পৃথক পরিষেবা ফাইল তৈরি করতে পারে এবং কেবল এটি সক্ষম করে। তবে আমি কেবল এটি জানতে চাই যে এটি উপরে বর্ণিত পদ্ধতিতে সম্ভব হতে পারে কিনা।
হান্স

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

এটি যদি না হয়, আপনি যদি sudoনথির ডকুমেন্টেশনগুলি পড়ে থাকেন - কমান্ডের যুক্তিগুলি সীমাবদ্ধ করার বিষয়ে sudoers (5) এর অনেক উদাহরণ রয়েছে।
মাধ্যাকর্ষণ

উত্তর:


19

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

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

আপনি লগ ইন করার পরে, সিস্টেমটি user@<uid>.serviceআপনার জন্য একটি সিস্টেম ইউনিট শুরু করবে, যা সিস্টেমডের একটি পৃথক "--user" উদাহরণ চালু করবে। নতুন ব্যবহারকারী-systemd ইউনিট ফাইলগুলি পড়তে হবে (দিয়ে শুরু default.targetথেকে) ~/.config/systemd/user/, /etc/systemd/user/এবং /usr/lib/systemd/user/


1
ধন্যবাদ মহাকর্ষ, মূলত আমি যা অনুভব করছিলাম তা ছিল। তবে এটি এছাড়াও একটি ডিবিস সমস্যা হিসাবে প্রমাণিত হয়েছে: একটি ডাবুসে একটি বাগ রয়েছে যা কোনও DBUS_SESSION_BUS_ADDRESSপ্রদত্ত ব্যবহারকারীর জন্য সঠিক গ্লোবাল ভেরিয়েবল সেট করে না , তাই সিস্টেমটেট ব্যবহারকারী সেশনে অ্যাক্সেস করতে পারে না, এটি আমাদের ত্রুটি করে। আমি একবার এই ছোট সমস্যাটি বুঝতে পেরেছিলাম, অন্য সবকিছু সুন্দর করে কাজ করে!
হান্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.