সিস্টেমডের অধীনে কোনও পরিষেবা বন্ধ করার জন্য উদেব বিধি লিখার সঠিক উপায় কী What


12

আমি আর্চ লিনাক্স চালাচ্ছি, এবং আমার একটি উদেব নিয়ম রয়েছে যা একটি ডিভাইস isোকানো হলে একটি পরিষেবা শুরু করে। এই ক্ষেত্রে, কোনও 3G মডেম প্লাগ ইন করা অবস্থায় এটি সংযোগ ডায়াল করে।

KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="netcfg@wvdial.service"

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

আমার যা দরকার তা হল একটি ম্যাচিং উদেব নিয়ম যা পরিষেবাটি বন্ধ করতে যখন ডিভাইসটি সরানো হয় তখন চলে।

হালনাগাদ

নীচের উত্তরটি ব্যবহার করে, আমার কাছে এখন যা রয়েছে তা হ'ল নিম্নলিখিত ইউদেব বিধি

KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"

নিম্নলিখিত পরিষেবা ফাইলের সাথে (যা মূলত অনুলিপি করা হয়েছে এবং নেটকফিজ পরিষেবা ফাইল থেকে আটকানো হয়েছিল:

[Unit]
Description=Netcfg networking service for Vodafone Dongle
Before=network.target
Wants=network.target
BindsTo=dev-gsmmodem.device
After=dev-gsmmodem.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/netcfg check-iface wvdial
ExecStop=-/usr/bin/netcfg down wvdial
KillMode=none

[Install]
WantedBy=multi-user.target

আমি netcfg-wvdialডায়ালিং করতে এওআর থেকে ব্যবহার করছি ।

উত্তর:


11

আপনার সমস্যাটি কেবলমাত্র সিস্টেমড ব্যবহার করে সমাধান করা যেতে পারে কেবলমাত্র এই নির্দিষ্ট করে যে আপনার পরিষেবাটির প্রয়োজন হয় বা আরও ভাল, প্রদত্ত ডিভাইসটি বিন্দুতে

বরাত দিয়ে:

"যদি অন্য একটির [প্রয়োজনীয় / আবদ্ধ] ইউনিট নিষ্ক্রিয় হয়ে যায় বা এর সক্রিয়করণ ব্যর্থ হয় তবে এই ইউনিট [পরিষেবা] নিষ্ক্রিয় হবে"

আপনাকে নিম্নলিখিতগুলির মতো আপনার পরিষেবা ফাইলটি সম্পাদনা করতে হবে।

[Unit]
<...>
BindsTo=<DEVICE UNIT HERE>.device
<...>
After=<DEVICE UNIT HERE>.device

দ্রষ্টব্য: উপলব্ধ সমস্ত ডিভাইস ইউনিট ফাইলগুলির ব্যবহারের একটি তালিকা পেতে systemctl list-units --all --full | grep ".device"


এর অর্থ কি এই যে আমার উদেব নিয়মের দরকার নেই? আপনার পরামর্শ অনুসারে আমি চেষ্টা করেছি, নেটসিএফজি @ wvdial.service প্রতিস্থাপনের জন্য একটি নতুন সার্ভিস ফাইল তৈরি করে এবং সেই দুটি লাইন সহ including এটি এখন পরিষেবাটি বন্ধ করে দেবে বলে মনে হচ্ছে, তবে ডিভাইসটি আবার প্লাগ ইন করা হলে এটি শুরু হয় না।
ক্রেজিস্টিক

@ ক্র্যাজিস্টিক আপনার এখনও পরিষেবাটি শুরু করার জন্য উদেব নিয়ম প্রয়োজন, আমি যা বোঝাতে চাইছিলাম তা বন্ধ করার জন্য আপনাকে উদেব ব্যবহার করার দরকার নেই।
brunocodutra

বুঝেছি. উদেব নিয়ম এবং পরিবর্তিত পরিষেবা ফাইল উভয়ের সাথে খুব সুন্দরভাবে কাজ করে।
ক্রেস্টস্টিক

2
আপনি StopWhenUnneeded=trueপরিবর্তে BindsToএবংAfter
সার্গা

@ সার্গা যখন আমি উত্তর দিয়েছি ততক্ষণে বাগটিStopWhenUnneeded=true কাজ করা থেকে বিরত ছিল তবে আমি বিশ্বাস করি এটি বেশ কিছুদিনের জন্য স্থির হয়ে গেছে।
brunocodutra
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.