rc.local을 자동으로 실행할 수 없습니다.

rc.local을 자동으로 실행할 수 없습니다.

그래서 저는 스크립트를 실행하려고 노력해 왔지만 /etc/rc.local제 인생에서는 아무것도 작동하지 않는 것 같습니다. 를 사용하여 수동으로 실행할 수 service rc.local start있으며 홈 디렉터리에 있는 파일에 'hi'를 표시하지만 재부팅하면 실행되지 않습니다. 모든 올바른 권한이 설정된 것으로 보이며 링크가 올바른 rc#.d 디렉토리에 존재합니다. 참고로 관련 정보는 다음과 같습니다.

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 45 Apr 12 21:10 /etc/rc.local


# ls -l /etc/init.d/rc.local                                  
-rwxr-xr-x 1 root root 812 Apr 12 21:00 /etc/init.d/rc.local


# for i in {0..6}; do cd rc$i.d ; pwd; ls -l |grep rc.local; cd ..; done
/etc/rc0.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 K20rc.local -> ../init.d/rc.local
/etc/rc1.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 K20rc.local -> ../init.d/rc.local
/etc/rc2.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 S20rc.local -> ../init.d/rc.local
/etc/rc3.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 S20rc.local -> ../init.d/rc.local
/etc/rc4.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 S20rc.local -> ../init.d/rc.local
/etc/rc5.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 S20rc.local -> ../init.d/rc.local
/etc/rc6.d
lrwxrwxrwx 1 root root  18 Apr 12 20:53 K20rc.local -> ../init.d/rc.local


# cat /etc/rc.local
#! /bin/bash

echo hi > ~user/test

exit 0

이 질문과 같이 /etc/rc.local및 을 모두 삭제하고 /etc/init.d/rc.local실행 update-rc.d rc.local remove한 다음 복원하고 실행 해 보았습니다 .update-rc.d rc.local defaultsRc.local이 실행되지 않습니다.. 그것은 작동하지 않았습니다.

재부팅하거나 초기화 수준을 입력한 후에도 작동하지 않습니다. shebang 줄을 읽을 때 작동하지 않았습니다 #! /bin/sh -eor #! /bin/bash. 하지만 수동으로 실행하면 /etc/rc.local/etc/init.d/rc.local스크립트를 모두 다른 파일에 에코할 수 있습니다.

그래서 제 질문은...제가 뭘 잘못하고 있는 건지, 어떻게 rc.local을 실행하게 할 수 있나요?입니다. 또한 대안(업스타트 등)에 대해 듣는 것은 괜찮지만 rc.local을 정상적으로 실행하는 방법(이상적으로는 무엇이 잘못되었는지 알려주는)을 보여주는(또는 찾는 데 도움이 되는) 답변만 수락하겠습니다.

가치에 대한 추가 정보는 다음과 같습니다.

# dmesg | grep "Linux version"
[    0.000000] Linux version 3.5.0-17-generic (buildd@allspice) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 (Ubuntu 3.5.0-17.28-generic 3.5.5)


# cat /proc/version
Linux version 3.5.0-17-generic (buildd@allspice) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012

# lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 14 Nadia
Release:        14
Codename:       nadia

답변1

문제는 이 줄에서:

echo hi > ~user/test

~user예상대로 확장되지 않습니다. rc.local실행 중이지만 예상치 못한 확장으로 인해 권한이 없는 위치에 쓰려고 합니다.

대신 다음을 시도해 보세요.

echo ~user/test > /dev/shm/test

그런 다음 의 내용을 확인하십시오 /dev/shm/test. 이는 rc.local실행되는 항목과 확장되는 항목을 모두 보여줍니다 ~user.

하지만 외부 환경에 의존하기보다는 명시적인 경로를 사용하는 것이 좋습니다.

답변2

"나는 신생 기업과 같은 대안에 대해 듣는 것을 꺼리지 않습니다."는 당신이 몇 가지 사항을 이해하지 못한다는 것을 의미합니다. 나는 민트 사용자는 아니지만 분명히 신생 기반 시스템입니다. Upstart는 init 데몬이며 시스템에는 하나만 설치되어 있습니다. 따라서 신생 기업은 대안이 아닙니다. 대안이 없습니다 --시스템이 upstart를 사용합니다. 기간. 다른 것은 사용하지 않습니다. 그러나 upstart에는 sysvinit 스크립트와의 이전 버전과의 호환성이 포함되어 있습니다. 즉, /etc/rc 디렉터리에 링크를 배치하여 서비스를 관리하고 및 service와 같은 일부 이전 명령을 사용할 수 있습니다 update-rc.d.

당신은 sysvinit 시스템이 어떻게 작동하는지 잘 알지 못하기 때문에 배우는 것은 시간 낭비라고 생각합니다. 실제 init 데몬이 어떻게 작동하는지 배울 수도 있습니다. Upstart는 매우 간단합니다. 그것에 대해 계속되는 불만의 95%(및 페도라 파생 시스템의 시스템에 대한 병렬 그립)는 단지 sysvinit에 대해 간단히 이해하고 뭔가를 배우는데 몇 시간을 소비해야 할 수도 있다는 사실에 화가 난 사람들이라는 점을 명심하십시오. 새로운.

따라서 sysvinit 스타일 링크에 대해 rc 디렉토리 등을 확인하라고 말하고 싶지만, 당신이 실패했다고 말한 솔루션에 연결한 "Rc.local이 실행되지 않습니다"라는 질문을 보면 시간을 낭비하고 있다고 생각합니다. 이 시점에서 그걸로. sysvinit 호환성과 /etc/rc 및 init.d 디렉토리는 잊어버리세요.

Upstart는 .conf파일을 처리합니다 /etc/init(참고: init.d 아님). 따라서 부팅 시 실행하려는 스크립트가 있는 경우 .conf 파일을 /etc/init에 추가하면 됩니다. 실행 가능해야 할 필요는 없지만 루트가 소유해야 합니다.

author "You"

start on started local-filesystems

script
    /etc/rc.local # but don't really be this lazy, see below
end script

향후 혼란과 추가적인 sysvinit 헛소리를 방지하려면 /etc/rc.local 스크립트의 이름을 다른 이름으로 변경하는 것이 좋습니다. 또는 더 나은 방법은 그 안에 있는 모든 내용을 .conf 파일로 옮기는 것입니다( scriptend script태그 사이의 모든 내용은 처리됩니다). 쉘에 의해).

신생 기업에 대한 최종 참조는 아마도신생 요리책. 내가 말했듯이, 이것은 sysvinit의 현명한 사용자 친화성 개선이지만 불행히도 온라인에는 여전히 이에 대한 적절한 자료가 부족하고 혼란스럽고 불완전한 것들이 많이 있습니다. 그러나 부팅 시 스크립트를 실행하는 것은 방금 설명한 것처럼 간단합니다.

.conf 파일 이름이 "my-localboot.conf"인 경우 다음을 사용하여 서비스를 테스트할 수 있습니다.

initctl start my-localboot

관련 정보