systemd는 /etc/rc.local을 실행하지 않습니까? 것을 알았습니다. Wiki 페이지에서 언급했듯이을

나는 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

어떤 제안?



답변

아치는 실행에 필요한 서비스 단위 파일을 포함하지 않았을 수 있습니다 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.


답변

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


답변

Pkgfile (내 시스템에서)은 다음과 같이 말합니다.

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

이 패키지는 원하지 않는 다른 것을 설치하지만 비활성화 할 수 있습니다. 참조 :
https://wiki.archlinux.org/index.php/Systemd#The_initscripts-systemd_package


답변

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

답변

두 가지 일반적인 문제점 :

  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.


답변

당신이있는 경우 /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

이것은 잘 알려지지 않은 것 같습니다. 파일의 이전 버전을 보여주는 몇 가지 게시물이 있으며 그러한 주석은 없습니다.