시작 중에 /etc/rc.local의 명령이 실행되지 않는 이유는 무엇입니까?


39

/etc/rc.local시작하는 동안 Tiny Tiny RSS에 대한 업데이트 데몬을 시작 하는 단일 명령이 스크립트 에 있지만 시작하는 동안 스크립트가 실행되지 않습니다. 왜?

전체 /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.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local 실행 가능합니다 :

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local 존재하며 실행 가능합니다.

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local 이 런레벨에 대해 시작시 실행됩니다 :

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

명령 행에서 /etc/rc.local을 수동으로 호출하면 update_daemon이로드됩니다 ...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

...이 문제가 해결 될 때까지 서버를 다시 시작할 때마다 기억해야합니다.

비슷한 질문이 이미 있지만 지금까지 내 특정 문제에 정보를 적용 할 수 없었습니다.

시작하는 동안 rc.local의 명령이 실행되지 않는 이유는 무엇입니까?


requiretty설정 때문일 수 있습니다 . 로그인하면 TTY에서 스크립트를 실행하지만 시스템 부팅 중에는 TTY가 아닙니다. 이 링크는 shell-tips.com/2014/09/08/…에 도움이 될 수 있습니다 . 감사합니다.
KICT

답변:


23

rc.local명령을 실행하는 동안 오류가 발생하면 스크립트가 종료됩니다 ( -e플래그를 언급하십시오 #!/bin/sh -e).

실행시 명령을 실행하려고 할 때 일부 전제 조건이 충족되지 않아 rc.local명령 실행이 실패 할 수 있습니다.

CPU 관리자를 수동으로 설정하는 동안 동일한 문제가 발생하여에서 실패했습니다 rc.local. update-rc.d시작시 명령을 실행 하는 데 사용되는 사용자 지정 해결 방법은 다음과 같습니다 .

  1. 표제를 사용하여 myscript.sh디렉토리에 파일 을 작성하십시오 /etc/init.d.#!/bin/sh
  2. 컨텐츠로 사용자 정의 명령을 넣으십시오.
  3. 실행 가능하게 만드십시오. sudo chmod +x /etc/init.d/myscript.sh
  4. 다양한 런레벨에 대한 스크립트의 심볼릭 링크를 만듭니다. sudo update-rc.d myscript.sh defaults

또한 /etc/network/if-up.d스크립트를 확인 하고 네트워킹이 시작될 때 명령을 트리거 할 수 있는지 확인할 수 있습니다.


답변 감사합니다. 질문을 게시 한 후 설정이 변경되었으므로 귀하의 답변으로 문제가 해결되었는지 테스트 할 수 없습니다.
xx

4 단계의 기능은 무엇입니까? 나는 처음이다update-rc.d
Mohith7548 1

7

시작시 rc.local에서 비슷한 문제가 발생했습니다.

sshades는 다음 답변을 제공했습니다.

우분투는 이제 systemd를 사용하고 있으며 rc.local은 기본적으로 "끄기"된 서비스로 간주됩니다. 다음 명령을 입력하고 재부팅하여 rc.local을 "on"으로 설정할 수 있습니다.

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

비록 그의 솔루션을 테스트하지는 않았지만 논리적으로 들리며 작동 할 것이라고 생각합니다. 그러나 :

또한 ./.config/autostart-scripts/에 스크립트를 추가하면 트릭을 수행하는 솔루션을 찾았습니다.


7
이 오류가 발생합니다. 장치 파일에는 설치 구성이 없습니다 (WantedBy, RequiredBy, 또한 [Install] 섹션의 Alias ​​설정 및 템플릿 장치의 DefaultInstance). 이는 systemctl을 사용하여 활성화 할 수 없음을 의미합니다. 이러한 종류의 장치를 갖는 가능한 이유는 다음과 같습니다. 1) 장치는 다른 장치의 .wants / 또는 .requires / 디렉토리에서 심볼릭 링크되어 정적으로 활성화 될 수 있습니다. 2) 장치의 목적은 요구 사항에 의존하는 다른 장치의 도우미 역할을하는 것입니다.
Rıfat Erdem Sahin 님이

또한이 오류가 발생합니다. rc.local꺼져 있으면 대안은 무엇입니까?

5

시도 sudo sysv-rc-conf하고 rc.local활성화 되어 있는지 확인하십시오.

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

예, 활성화되어 있습니다.
xx

이 명령을 설치해야합니까?
jcollum

1
@jcollum 네, 같은 패키지의 프로그램입니다. 설치하려면 다음을 입력하십시오sudo apt install sysv-rc-conf
banan3'14

rc.local내 서비스 목록에도 없습니다!

4

rc.local 스크립트가 실행 가능한지 확인하십시오 :

sudo chmod +x /etc/rc.local

그런 다음 활성화하십시오.

sudo systemctl enable rc-local.service

다음을 실행하여 시스템을 재부팅하거나 수동으로 스크립트를 시작하십시오.

sudo systemctl start  rc-local.service

다음을 실행하여 서비스 상태를 표시 할 수 있습니다.

$ sudo systemctl status rc-local.service
 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service

서비스를 수동으로 활성화 할 필요는 없습니다. 파일이 존재하고 실행 가능한 경우 systemd는 rc-local서비스를 자동으로 활성화합니다 .
muru

3

FW 규칙을로드하는 일부 호스팅 서버에서이 문제가 발생했습니다.

이 박스에서 그들은 매우 빠르게 재부트하며, load 문이 문제를 해결하기 전에 rc.local에 "sleep 1"을 넣는 것을 발견했습니다. FW 규칙을로드하기 전에 인터페이스가 정착하는 데 약간의 시간이 걸린 것 같습니다.


1
감사합니다. sleep 1내 문제를 해결했다. 흥미롭게도 많은 서버가 있지만 하나만이 문제가 있습니다.
Qian Chen

1

rc.localWindows에서 메모장을 사용하여 한 번 편집 했는데이 문제가 발생하기 시작했습니다.

이 경우 텍스트 편집기를 사용하여 메모장 ++과 같은 EOL 변환을 지원하여 EOL 스타일을 'Unix'로 변환하면 해결할 수 있습니다.

:set ff=unixVim에서 할 수도 있습니다 .


1

우분투 lxc 컨테이너에서 rc.local이 완벽하게 올바른 shebang을 가지고 있다면

#!/bin/sh

그것은 실패하지만 shebang을 제거하면 작동합니다.

왜 또는 어떤 쉘을 사용하는지에 대한 결론을 얻지 못했습니다. (다른 우분투 설치에서 적절한 shebang은 문제가되지 않습니다)


0

/etc/rc.local다음 명령을 사용하여 서버 시작 중에 실행 되는지 확인해야합니다 .

sudo systemctl enable rc-local.service

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.