systemd는 /etc/rc.local을 실행하지 않습니까?


11

나는 Archlinux를 사용하고 있으며 요즘 시스템을 시험해보기 시작했다.

그러나 systemd가 /etc/rc.local 스크립트를로드하지 않는다는 것을 알았습니다.

Wiki 페이지에서 언급했듯이을 실행 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다음 내용 으로 파일 을 만드십시오 (내 Fedora 시스템에서 복사 한 그대로).

#이 파일은 systemd의 일부입니다.
#
# systemd는 무료 소프트웨어입니다. 재배포 및 / 또는 수정할 수 있습니다
# GNU GPL (GNU General Public License) 약관에 따라
# 자유 소프트웨어 재단; 라이센스 버전 2 또는
이후 버전은 # (선택 사항)로 제공됩니다.

[단위]
설명 = / etc / rc.local 호환성
ConditionPathExists = / etc / rc.local

[서비스]
유형 = 포킹
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.
Patches

5
설치 섹션이없는 장치에서 "활성화"를 실행할 수 없습니다.이 예제는 작동하지 않을 수 있습니다.
lzap 12

1
한편, 파일 (잘하면 링크)에서 multi-user.target.wants정확히 를.
Pavel Šimerda

28

systemd 188-2에서 systemd는 [Install]섹션이없고 rc.local 서비스를 활성화 할 수 없다는 불만을 표시 합니다. 이전 버전의 경우도있을 수 있지만 Arch devs는 최근에 systemd 만 발표 했으므로 시스템을 수정하는 것이 기본값이 될 것입니다.

이를 해결하려면 다음에 다중 사용자 대상에 대한 섹션을 추가하십시오 /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 enable2011 년부터 발전기가 자동으로 활성화 한 서비스이기 때문 입니다. 그러나 아치 리눅스는 unix.stackexchange.com/a/471871/5132에 설명 된 바와 같이 발전기를 처음 제공하는 systemd에서 이전 버전과의 호환성 옵션을 켜지 않습니다.
JdeBP


2

rc.local을 실행 파일로 만드는 것을 잊지 마십시오. 그렇지 않으면 호환성 계층에서 실행되지 않습니다! 위의 예제에서 rc.local 파일을 실행 가능하게하기 위해 chmod a + x를 실행합니다. 다음과 같이 :

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

다른 가능한 문제는 rc.local 스크립트의 위치라고 생각합니다! systemd에 호환성을 아직 추가하지 않은 경우 (내장되어 있어야하며 이미 언급 한 것으로 보입니다) 파일 위치를 다시 확인해야 할 수도 있습니다 ... 내 OS에는 rc-local이 있습니다. /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첫 번째 코드 스 니펫에 표시된 것처럼 서비스 파일을 실행 가능 하게 만드는 것은 의미가 없습니다. 또한 Arch Linux에서 파일 경로는 /etc/rc.local아마도 systemd서비스 파일 의 내용 이 올바르지 않을 수 있습니다.
RavuAlHemio

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 에서 설명한 바와 같이 Arch는 이전 버전과의 호환성 메커니즘을 사용하지 않으며이 생성기가 없습니다.
JdeBP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.