আমি কীভাবে সিস্টেমড পরিষেবাদিগুলি ওভাররাইড বা কনফিগার করব?


109

/etc/defaultপ্রশাসককে এটির কনফিগার করতে মঞ্জুরি দেওয়ার জন্য অনেকগুলি sysv init স্ক্রিপ্ট একটি সম্পর্কিত ফাইল ব্যবহার করে। আপস্টার্ট কাজগুলি .overrideফাইল ব্যবহার করে পরিবর্তন করা যেতে পারে । আমি কীভাবে সিস্টেমড ইউনিটগুলিকে ওভাররাইড করব বা কনফিগার করব, এখন সেই সিস্টেমডি উবুন্টুতে ডিফল্ট?


মনে রাখবেন যে ExecStart=ফাঁকা এন্ট্রি দিয়ে সাফ করার সময় আপনি এটি পছন্দ করার পরে কোনও মন্তব্য রাখতে পারবেন না: ExecStart= # Empty line to clear previous entries.এটি অন্য ExecStart=এন্ট্রি হিসাবে নেওয়া হবে এবং তালিকায় যুক্ত হবে। গীত। আমার খ্যাতি কম থাকার কারণে আমি মুড়ুর উত্তরে মন্তব্য যুক্ত করতে পারিনি।
tysik

উত্তর:


185

systemdইউনিটগুলিতে ফাইল মেনে চলার দরকার নেই /etc/defaultsystemdসহজেই কনফিগারযোগ্য, তবে আপনার সিস্টেমড ইউনিট ফাইলগুলির সিনট্যাক্সটি জানতে হবে know

প্যাকেজগুলি জাহাজের ইউনিট ফাইলগুলি সাধারণত থাকে /lib/systemd/system/। এগুলি সম্পাদনা করার মতো নয় । পরিবর্তে, systemdআপনাকে উপযুক্ত ফাইল তৈরি করে এই ফাইলগুলিকে ওভাররাইড করতে দেয় /etc/systemd/system/

প্রদত্ত পরিষেবার জন্য foo, প্যাকেজটি সরবরাহ করবে /lib/systemd/system/foo.service। আপনি এর স্থিতিটি ব্যবহার করে পরীক্ষা করতে পারেন systemctl status foo, বা এর লগগুলি ব্যবহার করে দেখতে পারেন journalctl -u foo। সংজ্ঞাটিতে কিছু ওভাররাইড করতে foo, করুন:

sudo systemctl edit foo

এটি /etc/systemd/systemইউনিটের নাম অনুসারে একটি ডিরেক্টরি override.confএবং সেই ডিরেক্টরিতে ( /etc/systemd/system/foo.service.d/override.conf) ডিরেক্টরি তৈরি করে । আপনি এই ফাইলটি (বা অন্যান্য .confফাইলগুলিতে /etc/systemd/system/foo.service.d/) ব্যবহার করে সেটিংস যুক্ত বা ওভাররাইড করতে পারেন ।

ওভাররাইডিং কমান্ড আর্গুমেন্ট

gettyউদাহরণস্বরূপ পরিষেবাটি নিন । বলুন যে আমি আমার ব্যবহারকারীর কাছে টিটিওয়াই 2 অটলজিন রাখতে চাই (এটি পরামর্শযুক্ত নয়, তবে এটি কেবল উদাহরণ)। টিটিওয়াই 2 getty@tty2পরিষেবা দ্বারা চালিত হয় ( tty2টেমপ্লেটের উদাহরণ হিসাবে /lib/systemd/system/getty@service)। এটি করতে, আমাকে getty@tty2পরিষেবাটি পরিবর্তন করতে হবে ।

$ systemctl cat getty@tty2
# /lib/systemd/system/getty@.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service

# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes

# On systems without virtual consoles, don't start any getty. Note
# that serial gettys are covered by serial-getty@.service, not this
# unit.
ConditionPathExists=/dev/tty0

[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes

# Unset locale for the console getty since the console has problems
# displaying some internationalized messages.
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=

[Install]
WantedBy=getty.target
DefaultInstance=tty1

বিশেষত, আমাকে ExecStartলাইনটি পরিবর্তন করতে হবে , যা বর্তমানে:

$ systemctl cat getty@tty2 | grep Exec     
ExecStart=-/sbin/agetty --noclear %I $TERM

এটিকে ওভাররাইড করতে, এটি করুন:

sudo systemctl edit getty@tty2

এবং যোগ করুন:

[Service]
ExecStart=
ExecStart=-/sbin/agetty -a muru --noclear %I $TERM

মনে রাখবেন যে:

  1. আমি স্পষ্টভাবে স্পষ্ট ছিল ExecStartএটা আবার সেটিং, যেহেতু এতে একটি যুত সেটিং অনুরূপ সামনে After, Environment(সামগ্রিকভাবে, না প্রতি-পরিবর্তনশীল) এবং EnvironmentFileএবং অন্য কোনো সেটিংস যাই হোক বিরোধিতা RestartSecবা TypeExecStartশুধুমাত্র Type=oneshotপরিষেবার জন্য একাধিক এন্ট্রি থাকতে পারে ।
  2. আমাকে সঠিক বিভাগের শিরোনামটি ব্যবহার করতে হয়েছিল। মূল ফাইল সালে ExecStartহয় [Service], তাই আমার ওভাররাইড করা হয়েছে অধ্যায় ExecStartমধ্যে [Service]অধ্যায় হিসাবে ভাল। প্রায়শই, ব্যবহার করে প্রকৃত পরিষেবা ফাইলটি একবার আপনাকে দেখায় systemctl catযে আপনাকে কী ওভাররাইড করতে হবে এবং কোন বিভাগে এটি রয়েছে।

সাধারণত, আপনি যদি সিস্টেমড ইউনিট ফাইল সম্পাদনা করেন, এটি কার্যকর হওয়ার জন্য, আপনাকে চালনা করতে হবে:

sudo systemctl daemon-reload

তবে systemctl editস্বয়ংক্রিয়ভাবে এটি আপনার জন্য করে।

এখন:

$ systemctl cat getty@tty2 | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM
ExecStart=
ExecStart=-/sbin/agetty -a muru --noclear %I $TERM

$ systemctl show getty@tty2 | grep ExecS
ExecStart={ path=/sbin/agetty ; argv[]=/sbin/agetty -a muru --noclear %I $TERM ; ... }

এবং যদি আমি করি:

sudo systemctl restart getty@tty2

এবং প্রেস CtrlAltF2, প্রেস্টো! আমি সেই টিটিওয়াইতে আমার অ্যাকাউন্টে লগ ইন করব।

যেমনটি আমি আগেই বলেছি, getty@tty2এটি কোনও টেমপ্লেটের উদাহরণ। সুতরাং, যদি আমি template টেমপ্লেটের সমস্ত দাবিকে ওভাররাইড করতে চাই? এটি টেমপ্লেট সম্পাদনা করে নিজেই করা যেতে পারে (উদাহরণস্বরূপ সনাক্তকারীকে মুছে ফেলুন - এই ক্ষেত্রে tty2):

systemctl edit getty@

পরিবেশ ওভাররাইডিং

/etc/defaultফাইলগুলির একটি সাধারণ ব্যবহারের ক্ষেত্রে পরিবেশের ভেরিয়েবলগুলি সেট করা হয়। সাধারণত, /etc/defaultএটি একটি শেল স্ক্রিপ্ট, তাই আপনি এটিতে শেল ভাষার গঠন ব্যবহার করতে পারেন। সঙ্গে systemdঅবশ্য এই ক্ষেত্রে দেখা যায়। আপনি দুটি উপায়ে পরিবেশের ভেরিয়েবল নির্দিষ্ট করতে পারবেন:

একটি ফাইল মাধ্যমে

বলুন যে আপনি একটি ফাইলের মধ্যে পরিবেশের ভেরিয়েবল সেট করেছেন:

$ cat /path/to/some/file
FOO=bar

তারপরে, আপনি ওভাররাইডে যুক্ত করতে পারেন:

[Service]
EnvironmentFile=/path/to/some/file

বিশেষত, যদি আপনার /etc/default/grubকেবলমাত্র অ্যাসাইনমেন্ট থাকে এবং কোনও শেল সিনট্যাক্স না থাকে তবে আপনি এটি হিসাবে ব্যবহার করতে পারেন EnvironmentFile

Environmentএন্ট্রি মাধ্যমে

নিম্নলিখিত ওভাররাইড ব্যবহার করে উপরেরগুলিও সম্পাদন করা যেতে পারে:

[Service]
Environment=FOO=bar

যাইহোক, এই একাধিক ভেরিয়েবল, স্পেস, ইত্যাদি কটাক্ষপাত আছে সঙ্গে চতুর পেতে পারেন আমার অন্যান্য উত্তর এক ধরনের একটি দৃষ্টান্ত একটি উদাহরণ জন্য।

আরও পড়া

এই প্রক্রিয়াটির মাধ্যমে, systemdইউনিটগুলিকে ওভাররাইড করা খুব সহজ হয়ে যায় , পাশাপাশি এই জাতীয় পরিবর্তনগুলি পূর্বাবস্থায় ফেলা (কেবল ওভাররাইড ফাইলটি সরিয়ে দিয়ে)। এগুলি কেবলমাত্র সেটিংসই নয় যা পরিবর্তিত হতে পারে।

নিম্নলিখিত লিঙ্কগুলি দরকারী হবে:


1
ওনশোট প্রকারের নয় এমন পরিষেবাদির জন্য সেট করার আগে আপনাকে ভেরিয়েবলটি সাফ করতে হবে। এটি আমার সমস্যার সমাধান করেছে।
কলিন

3
ম্যানপেজ থেকে @ মার্কেইডিংটন systemd.service(5), বিভাগটি ExecStart: " প্রকারটি = ওনশোট না হলে সঠিকভাবে একটি কমান্ড দিতে হবে Type যখন প্রকার = ওনশোট ব্যবহার করা হয়, শূন্য বা আরও কমান্ড নির্দিষ্ট করা যেতে পারে in একই ক্ষেত্রে একাধিক কমান্ড লাইন সরবরাহ করে কমান্ডগুলি নির্দিষ্ট করা যেতে পারে নির্দেশনা বা বিকল্প হিসাবে, এই নির্দেশটি একই প্রভাবের সাথে একাধিকবার নির্দিষ্ট করা যেতে পারে this যদি এই বিকল্পটির জন্য খালি স্ট্রিংটি বরাদ্দ করা হয়, শুরু করার জন্য আদেশের তালিকাটি পুনরায় সেট করা হয়, এই বিকল্পের পূর্ববর্তী কার্যভারের কোনও প্রভাব থাকবে না। "
মুরু

1
@ ওরিয়েন্ট আপনি sudo rmওভাররাইড ফাইলটি করতে পারেন এবং তারপরে systemctl daemon-reload, বা আপনি systemctl editওভাররাইডের সমস্ত কিছু মন্তব্য দিয়ে প্রতিস্থাপন করতে পারেন । পরিষেবা ফাইলগুলিতে মন্তব্যগুলি শুরু হয় #
মারু

3
@ ওরিয়েন্টsystemctl revert foo
আইয়েল

1
তিনটি পদ্ধতির (ওভাররাইড ফাইল, পরিবেশের ফাইল, পরিবেশ পরিবর্তনশীল) অগ্রাধিকারের ক্রম কী? অর্থাৎ, তিনটি ক্ষেত্রে সংজ্ঞায়িত একটি চলকের জন্য কোন মানটি কার্যকর হবে?
নিকোলোস কাকৌরোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.