অন্য সিস্টেমড সার্ভিস শুরুর আগে আমি কীভাবে শুরুতে একটি সিস্টেমড পরিষেবা চালু করতে পারি?


9

আমি একটি পুরাতন এইচপি ল্যাপটপে উবুন্টু 16.04 চালাচ্ছি

একটি ছোট হোমমেড প্লেক্স সার্ভার তৈরি করতে আমি এতে কিছু সফ্টওয়্যার ইনস্টল করেছি। আমি সোনার, রাডার, প্রলয়, জ্যাকেট ইত্যাদি স্থাপন করেছি এবং সেগুলি স্বয়ংক্রিয়ভাবে প্রারম্ভের সময় চালু হয়!

বেশ কয়েকদিন আগে আমি রক্লোনও ইনস্টল করার সিদ্ধান্ত নিয়েছি এবং আমি তৈরি করেছি (একটি গিটহাব প্রকল্পের জন্য ধন্যবাদ) কয়েক ফোল্ডার যা প্রতিটি স্টার্টআপে একটি স্ক্রিপ্ট চালু করে মাউন্ট করতে হবে (আমি এটি টার্মিনাল রচনার মাধ্যমে প্রবর্তন করব sudo ~/bin/check.mount)। সোনার এবং রাডার একটি অস্থায়ী ফোল্ডারে প্রলয়ের মাধ্যমে জিনিসগুলি ডাউনলোড করার জন্য সেট আপ করা হয় এবং তারপরে এটিকে দুটি মাউন্টযুক্ত ফোল্ডারগুলির মধ্যে একটিতে রফতানি করে।

সমস্যাটি হ'ল আমি ম্যানুয়ালি স্ক্রিপ্টটি চালু করার সময় সোনার / রাডার ইতিমধ্যে চালু এবং চলছে এবং তাদের মূল ফোল্ডারগুলি খুঁজে পাচ্ছে না, সুতরাং তারা আমাকে একটি ত্রুটি দেয়।

আমি যা করতে চাই তা হ'ল স্বয়ংক্রিয়ভাবে চেক.মাউন্ট স্ক্রিপ্টটি চালু করতে একটি Mountgdrive.service (পরিষেবা বা প্রয়োজনীয় যা কিছু প্রয়োজন) তৈরি করা এবং যদি তা পর্যাপ্ত না হয় তবে সোনারআরসার্ভাইস এবং রাডারআরসার্ভিসে একটি বিলম্ব সন্নিবেশ করান! এটা কি সম্ভব?

আমি এটি দিয়ে লিখেছি sudo nano /etc/systemd/system/mountgdrive.service

[Unit]
Description=MountSmokeScreen
After=network.target

[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

এবং sonarr.service এবং radarr.service যোগ করা mountgdrive.serviceমধ্যে After=ভালো বিট

[Unit]
Description=Sonarr
After=syslog.target network.target mountgdrive.service

[Service]
User=samsepioldoresh4ze
etcetc
....

কিন্তু এটি কাজ করছে না! সোনার এবং রাডার স্বাভাবিকভাবে শুরু হয় তবে ড্রাইভগুলি মাউন্ট হয় না! আমি কি ভুল করছি?


এছাড়াও, rtcwake আমার ল্যাপটপে কাজ করে না - আমি মনে করি এটি কার্নেলের সমস্যা ?! এটি ঠিক করার কোনও উপায় আছে?


1
যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি চান sonarr.serviceএবং radarr.serviceচালানো mountgdrive.serviceশেষ হয়ে চলছে?
ড্যান

@ ডান ঠিক! সমস্যাটি হচ্ছে, আমি এটি যেভাবে লিখেছি তা আপাতদৃষ্টিতে mountgdrive.serviceচালিত হয় তবে কিছুই করে না (এটি ড্রাইভগুলি মাউন্ট করে না), এবং তারপরে sonarr.serviceএবং radarr.serviceসাধারণভাবে চালান কারণ উবুন্টু মৃত্যুদন্ড কার্যকর হয়েছিলmountgdrive.service
samsepioldoloresh4ze

1
আমি আপনাকে .mountইউনিট সন্ধান করার পরামর্শ দিচ্ছি । আপনার সমস্ত mountgdrive.serviceকাজ যদি কোনও ডিরেক্টরি বা এর অনুরূপ মাউন্ট করে চলেছে তবে আপনি এটি কোনও .mountপরিষেবাতে পরিবর্তন করতে সক্ষম হতে পারেন । এটি এটিকে আরও নির্ভরযোগ্য করে তোলে কারণ আপনার উপর নির্ভরতা রয়েছে on
ড্যান

উত্তর:


26

কারণ আপনি এই সমস্যা হচ্ছে কারণ আপনি ব্যবহার করছেন হয় After=আপনার কাছে প্রয়োজন যখন Requires=বা Wants=

নির্ভরতা পরিচালনার জন্য 3 টি প্রধান বৈশিষ্ট্য রয়েছে। আমি পার্থক্যটি সংক্ষেপে ব্যাখ্যা করার চেষ্টা করব তবে আপনি [ইউনিট] বিভাগ বিকল্পসমূহে আরও বিশদ পেতে পারেন freedesktop.org

  1. After=

    এই বিকল্পটি কেবল ইউনিটগুলির ক্রম সেট করে, এটি গ্যারান্টি দেয় না যে পরিষেবাটি শুরু হয়ে গেছে।

  2. Wants=

    এই বিকল্পটি আপনার ইউনিটটিকে অন্য ইউনিট শুরু করার পরে কেবল শুরু করার অনুমতি দেয়। (এটি সফলভাবে শুরু হয়েছে কিনা তা বিবেচনা করে না)

  3. Requires=

    ঠিক যেমন Wants=, তবে, নির্ভরতাগুলি সফলভাবে শুরু হওয়ার পরে এটি আপনার ইউনিটটি শুরু করবে।

আপনি এই বিকল্পগুলির প্রত্যেকটির বিপরীতমুখী ব্যবহার করতে পারেন ।

  1. After= বিপরীত হয় Before=
  2. Wants= বিপরীত হয় WantedBy=
  3. Requires= বিপরীত হয় RequiredBy=

আপনার সমস্যা সমাধানের জন্য আপনাকে নিজের মাউন্ট পরিষেবাটি এতে পরিবর্তন করতে হবে:

[Unit]
Description=MountSmokeScreen
After=network.target
Before=sonarr.service radarr.service

[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target sonarr.service radarr.service

অথবা আপনি যোগ করতে পারেন Wants=mountgdrive.serviceকরতে sonarr.serviceএবং radarr.serviceইউনিট।

নিম্নলিখিতটি চালিয়ে ডিফল্ট ফাইলগুলি পরিবর্তন না করে আপনি এটি করতে পারেন (এর জন্য আপনাকেও এটি করতে হবে radarr.service):

systemctl edit sonarr.service

এবং নিম্নলিখিতটি প্রবেশ করান:

[Unit]
Wants=mountgdrive.service

টীকা: আপনি প্রতিস্থাপন করতে পারেন Wants=সঙ্গে Requiresবা WantedBy=সঙ্গে RequiredBy=আপনি দুটি পরিষেবা এ সব শুরু করার জন্য যদি না চান mountgdrive.serviceব্যর্থ (যদিও Wants=সাধারণত যথেষ্ট এবং এমনকি ডক্সে প্রস্তাবিত)।

সম্পাদনা: WantedByএবং RequiredByবিকল্পগুলি কেবলমাত্র [Install]বিভাগের অধীনে ব্যবহার করা যেতে পারে । (ধন্যবাদ @ ইয়ানকি )


জন্য ধন্যবাদ Wants=এবং WantedBy=, আমি অবশ্যই তাদের ব্যবহার করব !! আমি এই ত্রুটিটি পেয়েছি যদিও আমি ল্যাপটপটি পুনরায় চালু করার সময় i.imgur.com/a3LE3G9.png
samsepioldoloresh4ze

1
লিপিটিতে একটি ত্রুটি বলে মনে হচ্ছে। আপনি এটি শেষ হওয়া লাইন থেকে দেখতে পাচ্ছেন Can't open /.config/SmokeScreen/smokescreen.conf। ইওরো স্ক্রিপ্টে আপনার "~ / .config / ..." থাকতে পারে। আপনার টিলড ( ~) সম্পূর্ণ পাথের সাথে প্রতিস্থাপন করা উচিত /home/you_user_name/.config/....(বা আপনার স্ক্রিপ্টের সাথে সম্পর্কিত পাথ ব্যবহার করুন)
ড্যান

github.com/FourFingerLifeHug/SmokeScreen/blob/master/… - এটি চেক.মাউন্ট স্ক্রিপ্ট, তাই আমার সমস্ত পথ (OME (হোম)) এবং $ (বিন্দির) পুরো পথ দিয়ে পরিবর্তন করা উচিত? ধন্যবাদ!
সামসপিওল্ডলোরেশ 4ze

1
@ samsepioldoloresh4ze হ্যাঁ, $HOMEবুট সময় উপলভ্য নয়, কারণ লগ ইন এখনও ব্যবহারকারী নেই।
ড্যান

করা উচিত WantedBy=হতে [Unit]অধ্যায়? আমি ভেবেছিলাম এটি কেবল ভিতরে যেতে পারে [Install]
ইয়াঙ্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.