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 defaults다음 질문과 같이 실행해 보았습니다.rc.local이 실행되지 않습니다. 그건 소용없어요.

재부팅하거나 초기화 수준을 입력한 후에도 작동하지 않습니다. shebang 줄이 #! /bin/sh -e또는 이면 작동하지 않습니다 #! /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 기반 시스템인 것 같습니다. Upstart는 init 데몬이며 시스템에는 하나만 설치되어 있습니다. 따라서 신생 기업은 대안이 아닙니다.시스템에서 upstart를 사용합니다.. 기간. 다른 것은 사용하지 않습니다. 그러나 upstart에는 sysvinit 스크립트와의 이전 버전과의 호환성이 포함되어 있습니다. 즉, /etc/rc 디렉터리에 링크를 배치하여 서비스를 관리하고 및 같은 일부 이전 명령을 사용할 수 service있습니다 update-rc.d.

당신이 인정한 바에 따르면 sysvinit 시스템이 어떻게 작동하는지 잘 이해하지 못하기 때문에 그것을 배우는 것은 시간 낭비라고 생각합니다. 실제 init 데몬이 어떻게 작동하는지 이해할 수도 있습니다. Upstart는 매우 간단합니다. 이에 대한 불만 사항(및 Fedora 파생 제품의 systemd에 대한 유사한 불만 사항)의 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 파일로 옮기고 그 사이에 있는 모든 항목에 태그를 지정하는 것이 script더 좋습니다. end script처리) 쉘에 의해).

신생 기업에 대한 권위 있는 참고 자료는 다음과 같습니다.누보 리치 요리법. 내가 말했듯이 이것은 사용자 친화성 측면에서 sysvinit에 비해 개선되었지만 불행히도 온라인에는 여전히 이에 대한 적절한 자료가 부족하고 혼란스럽고 불완전한 내용이 많이 있습니다. 그러나 시작 시 스크립트를 실행하는 것은 방금 설명한 것처럼 간단합니다.

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

initctl start my-localboot

관련 정보