systemd /etc/rc.local çalıştırmıyor mu?


12

Archlinux kullanıyorum ve bugünlerde systemd denemeye başladım.

Ancak, systemd /etc/rc.local betiğimi yüklemediğini buldum.

Wiki sayfasında belirtildiği gibi koştum systemctl enable rc-local.service, ama bu yardımcı olmadı.

/Etc/rc.local dosyamın içeriği:

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

Herhangi bir öneri?

Yanıtlar:


16

Arch, çalışması için gerekli servis birimi dosyasını içermemiş olabilir rc.local.

Sadece /etc/systemd/system/rc-local.serviceaşağıdaki içeriğe sahip bir dosya oluşturun (Fedora systemd sistemimden kopyalanmış sözcükler):

# Bu dosya systemd'nin bir parçasıdır.
#
# systemd özgür bir yazılımdır; yeniden dağıtabilir ve / veya değiştirebilirsiniz
# tarafından yayınlanan GNU Genel Kamu Lisansı koşulları uyarınca
# Özgür Yazılım Vakfı; Lisansın 2. sürümü veya
# (sizin seçiminize göre) daha sonraki bir sürümü.

[Birim]
Açıklama = / etc / rc.local Uyumluluk
ConditionPathExists = / etc / Rc.local

[Hizmet]
= Çatallama yazın
ExecStart = / etc / rc.local start
TimeoutSec = 0
StandardOutput = Tty
RemainAfterExit = yes
SysVStartPriority = 99

Ardından, systemctl enable rc-local.serviceetkinleştirmek için root olarak çalıştırın . Ayrıca çalıştırarak test edebilir / çalıştırabilirsiniz systemctl start rc-local.service.


Bu iki dosya zaten var: /etc/systemd/system/multi-user.target.wants/rc-local.serviceve /lib/systemd/system/rc-local.service
Felix Yan

2
Muhtemelen devre dışıdır. Koşmayı deneyin systemctl enable rc-local.service. Sorun yaşamaya devam ederseniz, lütfen çıktısını gönderin systemctl status rc-local.service.
Yamalar

5
Yükleme bölümü olmayan birimde "etkinleştirme" yapamazsınız, bu örnek belki de çalışmayacaktır.
lzap

1
Öte yandan, dosya (umarım bir bağlantı) multi-user.target.wantstam olarak ne sağlar .
Pavel Šimerda

28

Systemd 188-2 ile, systemd [Install]bölüm olmaması ve bu nedenle rc.local hizmetini etkinleştirememesi konusunda şikayette bulunur . Önceki sürümlerde durum böyle olabilirdi, ancak Arch devs henüz yeni duyurulmuş olan systemd varsayılan olduğundan sistemimi düzeltiyorum.

Bunu düzeltmek için çok kullanıcılı hedef için bir bölüm ekleyin /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.localKomut dosyasını oluşturun vechmod +x /etc/rc.local


1
Bunun nedeni rc-local.service, hiçbir zaman üzerinden etkinleştirilen bir hizmet değildi, systemctl enableancak 2011'den beri bir jeneratör tarafından otomatik olarak etkinleştirilen bir hizmet olmuştur . Ancak Arch Linux, unix.stackexchange.com/a/471871/5132 adresinde açıklandığı gibi , jeneratörü ilk etapta sağlayan sistemd'de geriye dönük uyumluluk seçeneklerini açmaz.
JdeBP


2

Rc.local dosyasını çalıştırılabilir yapmayı unutmayın - yoksa uyumluluk katmanı çalışmaz! Listelenen yukarıdaki örneklerde - rc.local dosyasını yürütülebilir yapmak için chmod a + x komutunu çalıştırırsınız. Aşağıdaki gibi:

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

Başka bir olası sorunun rc.local betiğinizin yeri olduğunu düşünürdüm! Sistemd ile uyumluluğu henüz eklemediyseniz (yerleşik olması gerekir - ve zaten mevcut olduğundan daha önce bahsedilmiş gibi görünüyor) dosyalarınızın konumunu iki kez kontrol etmeniz gerekebilir ... İşletim sistemimde rc-local var /etc/rc.d/rc.local bu yüzden aşağıdakileri çalıştırdım:

$ 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İlk kod snippet'inizde gösterildiği gibi , hizmet dosyasını yürütülebilir hale getirmek anlamsızdır . Ayrıca, Arch Linux'ta, dosya yolu /etc/rc.local- belki de systemdhizmet dosyasının içeriği yanlıştır.
RavuAlHemio

1

İki yaygın gotchas:

  1. /etc/rc.d/rc.localÇalıştırılabilir yapmayı unutmayın . Kullanabilirsiniz

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

    çalıştırılabilir yapmak için.

  2. #!/bin/shİlk satırına bir çizgi koymayı unutmayın /etc/rc.d/rc.local. İşlerin nasıl görünmesi gerektiği aşağıda açıklanmıştır:

    #  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
    

    Benzer bir çıktı almazsanız, /etc/rc.d/rc.localen üstte sadece içeren bir satır eklemek için düzenleyin #!/bin/sh.


1

/etc/rc.localYürütülebilir bir dosya olarak varsa , systemd-rc-local-generator/ tarafından önyükleme işlemine alınır rc-local.service.

En azından /etc/rc.localkullandığı varsayılan yoldur, ancak bu dağıtım tarafından ayarlanır. Çünkü esas olarak geriye dönük uyumluluk içindir ve farklı dağıtımlar farklı yollar kullanıyordu. Örneğin Fedora'da, yol /etc/rc.d/rc.local. Yolu aşağıdaki gibi kontrol edebilirsiniz:

$ 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

Görünüşe göre bu çok iyi bilinmiyor. Dosyanın önceki bir sürümünü gösteren ve böyle bir yorumu olmayan birkaç gönderi var.


1
Bu aslında doğru değil. Unix.stackexchange.com/a/471871/5132 adresinde açıklandığı gibi Arch, geriye dönük uyumluluk mekanizmalarını kullanmaz ve bu jeneratöre sahip değildir.
JdeBP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.