보너스 포인트

보너스 포인트

저는 현재 시스템 시작/부팅 시 스크립트 실행과 크론 실행 init.d의 차이점을 이해하려고 노력 중입니다.@reboot

사용 @reboot(이 방법은 다음에서 사용됩니다.이 포럼통과찬드라)가 더 쉽습니다. 들어가서 crontab -e하나를 생성 @reboot /some_directory/to_your/script/your_script.txt하면 your_script.txt시스템이 재부팅될 때마다 실행됩니다. 자세한 설명 @reboot여기

또는 삽입 /etc/init.d/your_script.txt하여두 번째 줄귀하의 스크립트는 다음과 같습니다

#!/bin/bash
# /etc/init.d/your_script.txt

실행할 수 있으며 시스템이 시작될 때마다 실행되어야 합니다 chmod +x /etc/init.d/your_script.txt.your_script.txt

  1. 둘 사이의 주요 차이점은 무엇입니까?
  2. 어느 것이 더 강합니까?
  3. 둘 중에 더 좋은 게 있나요?
  4. 부팅 중에 실행할 스크립트를 포함하는 올바른 방법입니까?

시작 중에 실행할 bash .sh 파일을 병합하겠습니다.

답변1

init.dSysV 스크립트라고도 하며 시스템 초기화 및 종료 중에 서비스를 시작하고 중지하는 데 사용됩니다. ( /etc/init.d/호환성을 위해 시스템이 활성화된 시스템에서도 스크립트를 실행할 수 있습니다.)

  • 이 스크립트는 시작 및 종료 중에 실행됩니다(기본적으로).
  • 스크립트는 단순한 스크립트가 아니라 init.d 스크립트여야 합니다. start그 이상을 지원해야 합니다 stop(참조:데비안 정책)
  • 스크립트를 실행할 수 있습니다.기간시스템이 시작됩니다(언제 정의할 수 있음).

crontab(그러므로 @reboot).

  • cron은 일반적인 명령이나 스크립트를 실행하며 여기서는 특별한 것이 없습니다.
  • 모든 사용자가 @reboot스크립트를 추가할 수 있습니다(루트뿐만 아니라).
  • systemd가 있는 Debian 시스템에서는 cron의 @reboot가 multi-user.target.
  • SysV(systemd 아님)가 있는 데비안 시스템에서 crontab(5)은 다음을 언급합니다:@reboot의 경우 cron(8) 데몬이 시작될 때 시작됩니다. 특히 일부 시스템 데몬이나 기타 기능이 시작되기 전일 수 있습니다. 이는 기계의 시동 순서 때문입니다.
  • 시작할 때와 정기적으로 동일한 스크립트를 예약하는 것은 쉽습니다.

/etc/rc.local종종 추악하거나 반대하는 것으로 간주됩니다(적어도빨간 모자), 하지만 여전히 몇 가지 좋은 기능이 있습니다.

  • rc.local은 일반적인 명령이나 스크립트를 실행하며 여기서는 특별한 것이 없습니다.
  • SysV(systemd 아님)가 있는 Debian 시스템: ( rc.local거의) 마지막 서비스가 시작되었습니다.
  • 하지만 systemd가 있는 데비안 시스템에서는 기본적으로 rc.local나중에 실행됩니다(아니요!)network.targetnetwork-online.target

systemd network.target및 에 대해 network-online.target읽어보세요.네트워크 연결 후 서비스 실행.

답변2

먼저 다음 사항을 명확히 할 필요가 있습니다.

  • 초기화 파일httpd예를 들어 서비스 제어 스크립트가 저장되는 디렉터리입니다. 제어 스크립트는 서비스의 시작과 중지를 제어할 수 있습니다.cron
  • 로컬 파일시스템 시작 중에 임의의 스크립트를 실행할 수 있는 서비스입니다.

rc.local스크립트를 사용하는 것과 스크립트를 실행하는 것 중 어느 것이 더 나은지에 대해서는 cron실용성보다는 미학적 문제에 더 가깝다고 생각합니다. cron작업 스케줄러로서 업데이트 확인, 캐시 지우기 또는 보안 감사 수행과 같은 시스템 유지 관리를 수행하는 방법으로 고안되었습니다. 이는 주어진 시간에 필요한 스크립트나 명령(예: )을 실행할 수 있으므로 이러한 기능 수행으로 제한된다는 의미는 아닙니다 @reboot.

rc.local반면에 사용법은 시스템 구성 유형 작업에 더 가깝습니다. 이는 rc.local일반적으로 시스템의 네트워크 구성, 서비스 또는 환경 설정을 담당하는 시스템의 초기화 시스템에 의해 수행되기 때문입니다(다시 말하지만 이에 국한되지는 않음). 이 작업).

rc.local그러나 모든 init 시스템이 메커니즘을 제공하는 것은 아니며 모든 cron 데몬이 @reboot의사 표시를 제공하는 것은 아니라는 사실로 인해 두 가지 사항 모두 완화되어야 합니다 .

보너스 포인트

앞서 언급했듯이 init.d이 디렉터리에는 시스템(적어도 SysVinit 유형 시스템을 사용하는 컴퓨터)에서 시작하거나 중지할 수 있는 서비스를 제어하는 ​​스크립트가 포함되어 있습니다. 초기화 시스템과 스크립트 목적에 따라 스크립트를 다음으로 변환합니다.초기화 스크립트서비스와 동일한 방식으로 실행됩니다. 그러나 이러한 파일을 빌드하는 방법에 대한 프레임워크가 크게 다를 수 있으므로 이는 init 시스템에 따라 크게 달라집니다.

마지막 말

또한 일반적으로 bash 스크립트는 접미사 .sh보다는 접미사 로 끝나는데 .txt, 이는 해당 파일이 텍스트 파일이 아니라 쉘 스크립트임을 즉시 나타내기 때문입니다. 즉, 그것이 있는 한셰르본( #!/bin/bash) 파일 상단에 있거나 는 bash /path/to/script.whatever스크립트 실행에 중요하지 않습니다.

답변3

아래에 답변을 적습니다.

  1. 둘 사이의 주요 차이점은 무엇입니까?

위에서 다른 사용자가 언급한 차이점 외에도 @reboot가 crond 데몬에 의존한다는 점을 강조하고 싶습니다. crond가 시작되는 순서에 의존합니다. 대부분의 경우 crond는 잘 시작되지만 때로는 시작하지 못할 수도 있습니다(적어도 내 프로젝트 중 일부에서는 실패를 본 적이 있습니다). init 스크립트를 작성할 때 스크립트에서 뭔가 잘못하면 일반적으로 오류가 발생합니다(예: 서비스 이후에 시작되는 서비스에 의존).

  1. 어느 것이 더 강합니까?

위의 내용을 바탕으로 init이 더 강력하다고 생각합니다. 그런데 첫 번째 답변에서 '프랭클린 피아트'가 언급한 또 다른 점이 있다. 일반적으로 데몬에 대한 초기화 스크립트가 필요하며 다음 전략을 따라야 합니다.

  1. 둘 중에 더 좋은 게 있나요?

나는 그렇게 생각하지 않습니다(rc.local은 약간 오래되었고 더 이상 사용되지 않습니다)

  1. 부팅 중에 실행할 스크립트를 포함하는 올바른 방법입니까?

예. 일반적으로 애플리케이션/패키지 작성자가 이 작업을 수행합니다.

관련 정보