부팅/부팅 시 쉘 스크립트를 시작하려고 합니다. /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.
/root/ark/startup.sh #Added
exit 0
그 자체로 매력처럼 작동하는 스크립트를 실행해야 합니다. (스크린 세션이 시작됩니다...)
이를 달성하기 위해 사용할 수 있는 도움이나 다른 방법이 있습니까?
답변1
잊어 버려 rc.local
...
데비안 8을 사용하고 있습니다. 당신은 체계화했습니다. van Smoorenburg System 5 클론의 /etc/rc.local
호환성 메커니즘인 이전 버전과의 호환성 메커니즘이기 때문에 systemd의 이중 이전 버전과의 호환성 메커니즘입니다 .rc
아래 하이퍼링크로 연결된 AskUbuntu 질문의 혼란에서 알 수 있듯이 /etc/rc.local
사용 시 상황이 심각하게 잘못될 수 있습니다. 다른 곳에서 사람들은 rc.local
부트로더의 같은 위치인 systemd가 실행되는 방식이 익숙한 실행 방식과 다르다는 사실에 놀랐습니다. 다른 사람들은 rc.local
이전 작업 방식을 예상하여 구축한 것이 새로운 udev
규칙, NetworkManager systemd-logind
또는 systemd-resolved
다양한 "스위트" 등에 의해 완전히 깨졌다는 사실에 놀랐습니다 .
잊어 버려 rc.local
... 이것은 갈 길이 아닙니다. 데비안 8이 있습니다. 따라서 적절한 시스템 서비스 단위를 만들고 이전 버전과의 호환성 수준이 서로 다른 지점에서 시작하지 마십시오. (Ubuntu에서는 3번 제거되었으며 rc
이후 System 5 클론은 자체적으로 복제되었습니다.두 배10여 년 전에 신생 기업으로 대체되었고 이후 systemd로 대체되었습니다. )
스크립트를 작성한 다음 systemd 서비스 단위에서 스크립트를 호출하여 startup.sh
systemd로 이 프로세스를 시작 하지 마십시오. 이 아이디어는 곧 다음과 같은 결과를 가져올 것입니다.시스템화 된 공포의 집지역. 프로세스 설정 및 실행을 최대한 직접적으로 설명하는 서비스 단위를 만듭니다. 래퍼 셸 스크립트의 제한 사항이 발생하는 경우에만 이 방법을 사용하세요. 래퍼 쉘 스크립트를 확인하십시오적어도exec
최종 데몬을 재정의 하는 데 사용됩니다 .
당신은 그 서비스가 무엇인지 말하지 않았습니다. 을 사용한다고 말씀하셨는데 screen
, 이것은 가난한 사람의 데몬 감독자로서 악용되는 경우가 많아 악용될 가능성이 높습니다.아니요다음 환경에서 서비스를 실행하는 방법실제서비스 매니저. 거기에서 "방주"라는 단어를 볼 수 있는데, 이 단어는 남용 가능성과 함께 screen
두 가지 사실을 떠올리게 합니다.
- systemd로 마이그레이션하기 위한 첫 번째 규칙.
- 이 규칙은 다시 입증되었습니다. 다른 사람이 나보다 4일 전에 이미 서비스 단위를 작성했습니다.https://unix.stackexchange.com/a/212117/51322015년으로 돌아왔습니다.
추가 읽기
- https://unix.stackexchange.com/a/233581/5132
- 조나단 데보인 폴라드(2015). 시스템화 된 공포의 집. 자주 주어지는 답변입니다.
답변2
전체 systemd를 사용하는 경우 표준 sysvinit 스크립트는 무시됩니다. sysvinit 스크립트를 사용하려면 systemd-shim을 설치해야 합니다.