systemd /etc/rc.local नहीं चलता है?


11

मैं Archlinux का उपयोग कर रहा हूं और इन दिनों सिस्टमड की कोशिश करने लगा।

हालाँकि, मैंने पाया कि systemd मेरी /etc/rc.local स्क्रिप्ट को लोड नहीं करता है।

जैसा कि विकी पेज में बताया गया है, मैं चला था systemctl enable rc-local.service, लेकिन इससे कोई फायदा नहीं हुआ।

मेरी /etc/rc.local फ़ाइल की सामग्री है:

echo -n 120 > /sys/devices/platform/i8042/serio1/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
iptables --table nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

कोई सुझाव?

जवाबों:


16

आर्क को चलाने के लिए आवश्यक सेवा इकाई फ़ाइल शामिल नहीं हो सकती है rc.local

बस /etc/systemd/system/rc-local.serviceनिम्नलिखित सामग्री के साथ एक फ़ाइल बनाएं (मेरे फेडोरा सिस्टमड सिस्टम से वर्बेटिम की प्रतिलिपि बनाई गई):

# यह फाइल सिस्टमड का हिस्सा है।
#
# systemd मुफ्त सॉफ्टवेयर है; आप इसे पुनर्वितरित कर सकते हैं और / या इसे संशोधित कर सकते हैं
# GNU जनरल पब्लिक लाइसेंस की शर्तों के तहत प्रकाशित के रूप में
# फ्री सॉफ्टवेयर फाउंडेशन; या तो लाइसेंस के संस्करण 2, या
# (अपने विकल्प पर) किसी भी बाद के संस्करण।

[यूनिट]
विवरण = / etc / r.local संगतता
ConditionPathExists = / etc / rc.local

[सर्विस]
Type = forking
ExecStart = / etc / rc.local प्रारंभ
TimeoutSec = 0
StandardOutput = tty
RemainAfterExit = हाँ
SysVStartPriority = 99

फिर, systemctl enable rc-local.serviceइसे सक्षम करने के लिए बस रूट के रूप में चलाएं । आप इसका परीक्षण भी कर सकते हैं / इसे अब चलाकर चला सकते हैं systemctl start rc-local.service


ये दोनों फाइलें पहले से मौजूद हैं: /etc/systemd/system/multi-user.target.wants/rc-local.serviceऔर /lib/systemd/system/rc-local.service
फेलिक्स यान

2
यह शायद तब अक्षम है। दौड़ने की कोशिश करो systemctl enable rc-local.service। यदि आपको परेशानी हो रही है, तो कृपया इसका आउटपुट पोस्ट करें systemctl status rc-local.service
पेट्स

5
आप उस इकाई पर "सक्षम" जारी नहीं कर सकते हैं जिसमें कोई इंस्टॉल अनुभाग नहीं है, यह उदाहरण शायद काम नहीं करेगा।
लज़ाप

1
दूसरी ओर, फ़ाइल (उम्मीद है कि एक लिंक) में multi-user.target.wantsवही है जो इसे सक्षम करता है।
पावेल Paमेरदा

28

Systemd 188-2 के साथ, systemd के पास कोई [Install]सेक्शन नहीं होने के बारे में शिकायत करता है और जैसे कि r rllocal सेवा को सक्षम करने में असमर्थ है। पहले के संस्करणों के मामले में हो सकता है, लेकिन चूंकि आर्क डीईएस केवल हाल ही में घोषित सिस्टमड डिफॉल्ट बन जाएगा, मैं अपने सिस्टम को ठीक कर रहा हूं।

इसे ठीक करने के लिए, केवल बहुउपयोगकर्ता लक्ष्य के लिए एक अनुभाग जोड़ें /etc/systemd/system/rc-local.service:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

/etc/rc.localस्क्रिप्ट बनाएं और इसके साथ निष्पादन योग्य बनाएंchmod +x /etc/rc.local


1
ऐसा इसलिए है क्योंकि rc-local.serviceकभी भी एक ऐसी सेवा नहीं थी जो किसी भी माध्यम से सक्षम की गई थी, systemctl enableलेकिन 2011 के बाद से एक जनरेटर द्वारा ऑटो-सक्षम सेवा है । हालाँकि, आर्क लिनक्स, जैसा कि unix.stackexchange.com/a/471871/5132 पर समझाया गया है, सिस्टम में पीछे की ओर संगतता विकल्प को चालू नहीं करता है जो पहले स्थान पर जनरेटर प्रदान करते हैं।
JDBP

4

Pkgfile (मेरे सिस्टम पर) कहता है:

$ pkgfile --search rc-local.service
community/initscripts-systemd

वह पैकेज अन्य सामान को स्थापित करता है जो आप नहीं चाहते हैं, लेकिन आप इसे अक्षम कर सकते हैं। इसे भी देखें: https://wiki.archlinux.org/index.php/Systemd#The_initscripts-systemd_package


2

Rc.local निष्पादन योग्य बनाने के लिए मत भूलना - या संगतता परत इसे नहीं चलाएगी! उपर्युक्त उदाहरणों में जो सूचीबद्ध हैं - आप r.local फ़ाइल को निष्पादन योग्य बनाने के लिए एक + x को chmod चलाएंगे। निम्नलिखित नुसार:

$ chmod a+X /etc/systemd/system/rc-local.service 

मुझे लगता है कि एक अन्य संभावित समस्या आपके rc.local स्क्रिप्ट का स्थान है! यदि आपने पहले से ही systemd के लिए संगतता नहीं जोड़ी है (जिसे बनाया जाना चाहिए - और पूर्व में मौजूद पहले से ही इसका उल्लेख लगता है) तो आपको अपनी फ़ाइलों के स्थान की दोबारा जांच करने की आवश्यकता हो सकती है ... मेरे OS पर मेरे पास है आरसी-स्थानीय /etc/rc.d/rc.local पर तो मैंने निम्नलिखित भाग किया:

$ sudo chmod a+x /etc/rc.d/rc.local
$ sudo systemctl restart rc-local.service
$ sudo systemctl status rc-local.service
rc-local.service - /etc/rc.d/rc.local Compatibility
      Loaded: loaded (/lib/systemd/system/rc-local.service; static)
      Active: active (exited) since Fri, 13 Apr 2012 14:42:39 -0600; 3s ago
     Process: 2285 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/rc-local.service

4
systemdसेवा फ़ाइल को निष्पादन योग्य बनाना व्यर्थ है , जैसा कि आपके पहले कोड स्निपेट में दिखाया गया है। इसके अलावा, आर्क लिनक्स पर, फ़ाइल पथ है /etc/rc.local- शायद systemdसेवा फ़ाइल की सामग्री गलत है।
रावुअल्हेमियो

1

दो आम मिलन:

  1. /etc/rc.d/rc.localनिष्पादन योग्य बनाने के लिए मत भूलना । आप उपयोग कर सकते हैं

    # chmod a+rx /etc/rc.d/rc.local
    

    निष्पादन योग्य बनाने के लिए।

  2. #!/bin/shपहली पंक्ति में एक पंक्ति रखना मत भूलना /etc/rc.d/rc.local। यहां बताया गया है कि चीजों को कैसे देखना चाहिए:

    #  head -1 /etc/rc.d/rc.local 
    #!/bin/sh
    # file /etc/rc.d/rc.local 
    /etc/rc.d/rc.local: POSIX shell script, ASCII text executable
    

    यदि आपको समान आउटपुट नहीं मिलता है, तो /etc/rc.d/rc.localबस शीर्ष पर एक पंक्ति जोड़ने के लिए संपादित करें #!/bin/sh


1

यदि आपके पास /etc/rc.localएक निष्पादन योग्य फ़ाइल है, तो इसे systemd-rc-local-generator/ द्वारा बूट प्रक्रिया में खींच लिया जाएगा rc-local.service

कम से कम /etc/rc.localडिफ़ॉल्ट पथ इसका उपयोग करता है, लेकिन यह वितरण द्वारा निर्धारित किया जाता है। क्योंकि यह मुख्य रूप से बैकवर्ड संगतता के लिए है, और विभिन्न वितरण अलग-अलग रास्तों का उपयोग कर रहे थे। जैसे Fedora पर, पथ है /etc/rc.d/rc.local। आप निम्नानुसार पथ की जाँच कर सकते हैं:

$ systemctl cat rc-local.service
# /usr/lib/systemd/system/rc-local.service
# ...

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.d/rc.local is executable.
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.d/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

ऐसा लगता है कि यह बहुत अच्छी तरह से ज्ञात नहीं है। कई पोस्ट हैं जो फ़ाइल के पिछले संस्करण को दिखाते हैं, जिसमें ऐसी कोई टिप्पणी नहीं है।


1
यह वास्तव में सच नहीं है। जैसा कि unix.stackexchange.com/a/471871/5132 पर बताया गया है , आर्क पीछे की ओर अनुकूलता तंत्र का उपयोग नहीं करता है और इसमें जनरेटर नहीं है।
JDBP
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.