নেটওয়ার্কিং শুরুর আগে একটি সিস্টেমযুক্ত পরিষেবা কীভাবে শুরু করবেন?


11

আমি একটি নতুন পরিষেবা (ডেবিয়ান জেসির অধীনে) সেট আপ করার চেষ্টা করছি যা নেটওয়ার্ক কনফিগারেশন সঞ্চিত আছে সেখানে কিছু মাউন্ট স্থাপন করতে হবে এবং সুতরাং নেটওয়ার্কিং.সেবার্স শুরু হওয়ার আগে এই পরিষেবাটি অবশ্যই শেষ করতে হবে ।

আমি নিম্নলিখিত চেষ্টা করেছিলাম:

[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=networking.service

ব্যবহার করে systemd-analyze plotআমি দেখতে পাচ্ছি যে আমার পরিষেবা শুরু হয় তবে networking.serviceপ্রায় 3 সেকেন্ড আগে শুরু হয়:

এখানে চিত্র বর্ণনা লিখুন

স্পষ্টতই আমার কনফিগারেশনটি ভুল, তবে সমস্যাটি খুঁজে পেতে আমার খুব কষ্ট হচ্ছে ... কোন সাহায্যের ব্যাপক প্রশংসা হয়েছে ..

হালনাগাদ

আমি বর্তমানে এটির local-fs.targetপরিবর্তে পরিষেবা কনফিগারেশনটি শুরু করে পরিবর্তিত করে সমাধান করেছি networking.service:

[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=local-fs.target

তবুও, আমি বুঝতে চাই যে আমার প্রথম কনফিগারেশনটি প্রত্যাশার মতো কেন কাজ করে নি ...?


পদ্ধতিযুক্ত পদ্ধতিতে কাজ করার কারণে, আক্ষরিক টেম্পোরাল ক্রম যাতে জিনিসগুলি চালিত হয় তা তাত্পর্যপূর্ণ নাও হতে পারে। নেটওয়ার্কিং যখন আসে, তখন এটি সফলভাবে সেই ডিরেক্টরিটির ফাইলগুলির সাথে সামঞ্জস্য হয়?
টম হান্ট

আমি নিশ্চিত না যে আমি আপনার প্রশ্নটি বুঝতে পেরেছি। যাইহোক, স্ক্রিপ্টগুলির /etc/network/interfacesউল্লেখ রয়েছে ip-upযা অন্য পার্টিশনে থাকে। এই পার্টিশনটি একটি জটিল স্ক্রিপ্ট দ্বারা মাউন্ট করা হয় /opt/intermodul-mounts/start.shযা নেটওয়ার্কিং স্থাপনের আগে চালিত হওয়া আবশ্যক । বর্তমানে, ip-upস্ক্রিপ্টগুলি কার্যকরভাবে শুরু হয় না কারণ বুট সময়ে এগুলি অ্যাক্সেসযোগ্য নয়। এর service networking restartপরে চালানো সমস্ত ইন্টারফেস সঠিকভাবে উপস্থিত করে।
ইউডো জি

সম্ভাব্য সদৃশ: সুপারসার
জোসিপ রডিন

উত্তর:


8

network-pre.target একটি টার্গেট যা কোনও নেটওয়ার্ক ইন্টারফেস কনফিগার হওয়ার আগে পরিষেবাগুলি অর্ডার করতে ব্যবহৃত হতে পারে। এর প্রাথমিক উদ্দেশ্য ফায়ারওয়াল পরিষেবাগুলি ব্যবহারের জন্য যা কোনও নেটওয়ার্ক ইন্টারফেস শেষ হওয়ার আগে ফায়ারওয়াল স্থাপন করতে চায়। এটি একটি প্যাসিভ ইউনিট: আপনি এটি সরাসরি শুরু করতে পারবেন না এবং এটি নেটওয়ার্ক ম্যানেজমেন্ট সার্ভিস দ্বারা টানা হয় না, তবে পরিষেবাটি যা এর আগে চালাতে চায় by

network-pre.targetনেটওয়ার্ক শুরু হওয়ার আগে আপনি কিছু সেটআপ করতে চাইলে আপনি ব্যবহার করতে চান

নেটওয়ার্ক কনফিগার করার আগে যে পরিষেবাগুলি চালনা করতে চান সেগুলিতে = নেটওয়ার্ক-প্রিপেট.আরগেট স্থাপন করা উচিত এবং এটিকে টানতে ওয়ান্টস = নেটওয়ার্ক-প্রিপেটেরেটেট সেট করা উচিত।

আপনার এগুলি [Unit]বিভাগের আওতায় রাখা উচিত :

Before=network-pre.target
Wants=network-pre.target

উল্লেখ


1
হেই @ এডওয়ার্ডারওয়াল্ডস, কিছু নেটওয়ার্ক কনফিগার সেটআপের জন্য আমি ঠিক এটি করছিলাম, তবুও ইউনিটটি কখনও চালিত হবে না বলে মনে হয়। উত্তর systemctl is-enabled <unit>সর্বদা static। অবশ্যই, আমি এটি সক্ষম করতে পারি না কারণ নেই WantedBy=। সর্বোপরি, এটি কী চেয়েছিল? এটি এমন কিছু যা নেটওয়ার্ক লোড হওয়ার আগে কিছু সেটআপ করে।
14

আপনি = রিমোট- fs.target বা মাউন্ট- fs.target দ্বারা চেষ্টা করতে পারেন।
এডওয়ার্ড টরভাল্ডস

2
ধন্যবাদ। আমি কাজটি শেষ করেছি Before=network-pre.targetএবং আমরা Wants=network-pre.targetযা [Install]করেছি তার জন্য WantedBy=network.target। শেষ বিভাগটি নেটওয়ার্কিংয়ের মাধ্যমে এটি প্রয়োজনীয় হতে বাধ্য করেছিল, পূর্ববর্তীটি এটি যথাযথভাবে রেখেছিল। যদিও একটি বেদনা ছিল
ডিচ করুন

যেহেতু আপনি অবশ্যই আপনার মাথাটি আমার চেয়ে অনেক বেশি সিস্টেমড করেছেন, আপনি কি আমার অন্যান্য কিউটি দেখতে পারেন? unix.stackexchange.com/questions/277783/… এখনও কীভাবে এটি করবেন তা নির্ধারণের চেষ্টা করছেন।
ডিচ করুন

আমি বিভ্রান্ত কারণ আমার এনক্রিপ্ট করা পার্টিশনের অভিজ্ঞতা নেই, আপনি যদি আমাকে কেবল পারেন তবে দয়া করে এটি করুন
এডওয়ার্ড টরভাল্ডস

3

দেবিয়ান জেসিতে যেমন হয়েছে, নেটফিল্টার-প্রসিডেন্ট প্যাকেজ (নেটওয়ার্ক শেষ হওয়ার আগেই iptables নিয়মগুলি লোড করার অনুমতি দেয়) এর একটি নেটফিল্টার-পার্সেন্টেন্টস রয়েছে যা দেখে মনে হচ্ছে:

# https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
# based on the netfilter-persistent package
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no

Before=network-pre.target
Wants=network-pre.target

Wants=systemd-modules-load.service local-fs.target
After=systemd-modules-load.service local-fs.target

Conflicts=shutdown.target
Before=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop

[Install]
WantedBy=multi-user.target

এর সাথে কেন বিরোধ হচ্ছে shutdown.target?!
অ্যালেক্সিস উইলক

1

ভুল সহজ এবং প্রধান জিনিষ আমি সবসময় তালগোল এক: আপনি মিশ্রিত করা Beforeএবং RequiredBy। একসাথে যায় না। অন্যরা লক্ষ্য সম্পর্কে সঠিক।


0
[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=basic.target

এই রেখাগুলি দিয়ে কিছু করা নিশ্চিত হয়ে যাবে যে এই ইউনিটটি নেটওয়ার্কের আগে চলেছে তবে বেশিরভাগ অন্যান্য গুরুত্বপূর্ণ সেটআপ হওয়ার পরে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.