Ubuntu 16.10에서 시작시 명령을 실행하는 방법 (rc.local 대안) 없습니다 : 해당 파일이나

Ubuntu 16.10을 실행하는 Linode 서버에서 할당량을 설정하고 있는데 다음 오류가 발생합니다.

마운트 된 장치 / dev / root를 stat () 할 수 없습니다 : 해당 파일이나 디렉토리가 없습니다

이 문제를 해결하기 위해 수정을 위해이 스레드 에 도달했습니다.

ln -s /dev/xvda /dev/root
/etc/init.d/quota restart

/etc/rc.local. 그러나 Ubuntu 16.10은 rc.local더 이상 systemd 를 사용 하지 않습니다 . 에 대한 대안은 무엇입니까 rc.local, 시작시 위의 명령을 어떻게 실행할 수 있습니까?

또한 서비스를 사용하도록 설정 systemctl enable rc-local.service했지만 작동하지 않았습니다. 모든 리드를 부탁드립니다.



답변

소개

George의 링크에서 제안한대로 새 서비스를 작성해서는 안된다고 생각합니다. 는 rc-local.service이미 systemd에 존재하고 서비스 파일은 제안 rc.local이 존재하고 실행 가능한 경우, 에 자동으로 뽑아됩니다multi-user.target . 따라서 방금 다른 방법으로 수행 한 작업을 다시 만들거나 강요 할 필요가 없습니다 systemd-rc-local-generator.

하나의 솔루션

빠른 해결 방법 (정식적인 방법인지 모르겠습니다) :

터미널에서 다음을 수행하십시오.

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
sudo reboot

그 후 rc.local시스템 시작시가 호출됩니다. 원하는 것을 삽입하십시오.

배경

터미널에서 할 경우 :

sudo systemctl edit --full rc-local

헤드 주석에 다음과 같은 줄이 포함되어 있음을 알 수 있습니다.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.

이는이 시스템에서 /etc/rc.local실행 파일이라는 파일이 있으면 multi-user.target으로 자동으로 가져옵니다. 따라서 해당 파일 ( sudo touch...)을 만들고 실행 가능하게 만듭니다 ( sudo chmod +x ...).


답변

이 솔루션이 systemd 여기에 사용되는 것이 좋습니다 .

  1. 서비스를 작성하십시오.

    sudo vi /etc/systemd/system/rc-local.service
    
  2. 거기에 코드를 추가하십시오 :

    [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
    
  3. /etc/rc.local실행 가능한지 확인 하고 그 안에이 코드를 추가하십시오 :

    sudo chmod +x /etc/rc.local

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
    
    exit 0
    
  4. 서비스를 활성화하십시오 :

    sudo systemctl enable rc-local
    
  5. 서비스를 시작하고 상태를 확인하십시오.

    sudo systemctl start rc-local.service
    sudo systemctl status rc-local.service
    
  6. 모든 것이 잘 code되면 /etc/rc.local파일에 파일을 추가 하고 다시 시작할 수 있습니다.

참고 : Lubuntu 16.10에서 테스트되었습니다.

출처:

https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd


답변

Jan의 대답에 추가하기 위해 일반적인 rc.local파일 과 달리 rc-local service모든 서비스가 시작된 후가 아니라 네트워크가 온라인 상태가 된 후에 실행됩니다.

경우에 따라 rc.local나중에 명령을 실행할 수도 있습니다 . 예를 들어 lxd시작 후 실행하기를 원했습니다 .

이 경우
컨텐츠와 함께 rc-local service드롭 인 conf 파일을 작성하여 시작 종속성을
편집 할 수 있습니다 /etc/systemd/system/rc-local.service.d/override.conf.

[Unit]
After=network.target lxd.service

필요한 단위 이름을 추가 할 수있는 위치 (추가 한 것처럼 lxd.service)

systemctl daemon-reload그 이후를 잊지 마십시오 .