부팅 / 시작 중에 스크립트 실행 init.d vs cron @reboot


48

현재 시스템 시작 / 부팅시 스크립트를 실행하기위한 init.dcron과 cron 의 차이점을 이해하려고 @reboot합니다.

의 사용 @reboot(이 메소드에 언급 된 이 포럼 에 의해 hs.chandra은 ) 단순히로 이동하여, 어떤 것을 간단 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.

Q1 : 이 둘의 주요 차이점은 무엇입니까?
Q2 : 어느 것이 더 강력합니까?
Q3 : 둘 중 더 좋은 것이 있습니까?
Q4 : 부팅하는 동안 실행할 스크립트를 포함시키는 올바른 방법입니까?

시작하는 동안 실행할 bash .sh 파일을 통합 할 것입니다.


2
또한 관련성이 있습니다. link1 link2
Rufus

답변:


37

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

  • 스크립트는 부팅 및 종료 중에 기본적으로 실행됩니다.
  • 스크립트는 script뿐만 아니라 init.d 스크립트 여야합니다. 그것은 지원해야 start하고 stop더 많은 (참조 데비안 정책 )
  • 스크립트는 시스템 부팅 중에 실행될 수 있습니다 (시간을 정의 할 수 있음).

crontab(따라서 @reboot).

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

/etc/rc.local종종 추악하거나 더 이상 사용되지 않는 것으로 간주되지만 (적어도 redhat에 의해 ) 여전히 멋진 기능이 있습니다.

  • rc.local은 일반적인 명령이나 스크립트를 실행할 것입니다. 여기서 특별한 것은 없습니다.
  • SysV (systemd가 아님)가있는 데비안 시스템 : rc.local(가장 마지막) 시작한 서비스입니다.
  • 그러나 systemd : rc.local가 있는 데비안 시스템에서는 network.target기본적으로 실행 됩니다 ( network-online.target! 아님).

systemd network.target및 및 관련 하여 네트워크 가동 후 서비스 실행을network-online.target 읽으십시오 .


Ununtu 16.04 /var/run/crond.reboot에서 시스템을 시작할 때마다 @reboot cron 작업을 실행하는 것보다 원하는 경우 매번 파일 을 제거해야 합니다. 이 파일이 존재하면 @reboot cron 작업이 실행되지 않습니다
Albert Català

@ Albert-Catala는 우분투에 버그를 제출합니다!
Franklin Piat

12

첫째, 설명은 다음과 같습니다.

  • init.d 는 서비스 제어 스크립트를 저장하는 디렉토리로, httpdor 와 같은 서비스의 시작 및 중지를 제어합니다.cron
  • rc.local 은 시스템 시작 프로세스의 일부로 임의의 스크립트를 실행할 수있는 서비스입니다.

스크립트 를 사용하는 것이 더 나은지 rc.local또는 cron실행 하는 것이 더 좋은지에 관해서는 그것이 실용성보다 미학의 문제라고 생각합니다. cron작업 스케줄러로서, 업데이트 확인, 캐시 청소 또는 보안 감사 수행과 같은 시스템 유지 관리 또는 유지 관리를 수행하는 방법으로 사용됩니다. 지정된 시간에 원하는 스크립트 또는 명령 (예 :)을 실행할 수 있으므로 해당 기능을 수행하는 것으로 제한되는 것은 아닙니다 @reboot.

사용 rc.local으로, 다른 한편으로는, 작업의 시스템 구성 유형 내에서 더 떨어질 것 rc.local기계에 의해 실행되는 것은, 시스템을 초기화하기 일반적으로 컴퓨터의 네트워크 구성을 설정하는 책임이있다, 서비스 또는 환경 (그러나 다시, 단지에 한정되지 않고, 이 작업).

그러나이 두 가지 점은 모든 init 시스템이 rc.local메커니즘을 제공 하지는 않으며 모든 cron 데몬이 @rebootpsuedo 태그를 제공하지는 않는다는 사실로 인해 강화되어야합니다 .

보너스 포인트

언급 한 바와 같이 init.d시스템에서 시작하거나 중지 할 수있는 서비스를 제어하는 ​​스크립트를 포함하는 디렉토리입니다 (적어도 SysVinit 시스템 유형 을 사용하는 시스템에서). init 시스템과 스크립트의 목적에 따라 스크립트를 서비스와 같은 방식으로 실행하기 위해 init 스크립트 로 변환하는 것이 합리적 일 수 있습니다 . 그러나 이러한 파일의 구성 방식을 둘러싼 프레임 워크가 크게 다를 수 있으므로 init 시스템에 크게 의존합니다.

마지막 단어

또한 일반적으로 bash 스크립트 는 파일이 텍스트 파일 대신 쉘 스크립트임을 즉시 나타 .sh내기 때문에 접미사가 아닌 접미사로 끝납니다 .txt. 상기되는 것을 그것이 갖는 하나 구비 당면한 ( #!/bin/bash파일의 상단을) 또는 호출 bash /path/to/script.whatever이 스크립트 실행의 관점에서 문제가 안된다.


bash스크립트는 일반적으로 확장으로 끝나지 않아야sh 합니다.
mikeserv

1
@mikeserv : 대부분의 bash 스크립트는 확장자가 없어야한다는 데 동의하지만 일반적으로 확장자가 ".sh"인 파일은 bash 스크립트입니다 . ".sh 파일이란 무엇입니까?"를 참조하십시오. .
David Cary

@DavidCary-그것은 권위있는 출처처럼 보이지 않습니다.
mikeserv

1
Wikipedia : "파일 이름 확장자 목록"Wikipedia : "쉘 스크립트" 는 놀랍게도 일반적으로 ".sh"확장자를 언급합니다.
David Cary

1
" 일반적으로 bash 스크립트 .sh.txt " 아닌 접미사로 끝납니다. 특히 shbash 스크립트 (또는 다른 쉘 스크립트)의 파일 이름 확장자는 txt일반적으로 일반 텍스트를 나타내는 것보다 더 정확 합니다. 어떤 확장 기능을 사용하든 웃을 수 있지만 확장 기능을 사용하는 sh것이 더 적절하고 일반적으로 사용되는 경우 일반적인 규칙이 사용됩니다. 필수는 아니지만 특히에서 실행하려는 스크립트에는 필요하지 않습니다 PATH.
wraeth

3

나는 나의 대답을 아래에 쓰고있다;

Q1 :이 둘의 주요 차이점은 무엇입니까?

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

Q2 : 어느 것이 더 강력합니까?

위의 내용을 토대로 init이 더 강력하다고 생각합니다. 그러나 첫 번째 답변에서 "프랭클린 피아트"에 언급 된 또 다른 요점이 있습니다. 일반적으로 데몬 용 초기화 스크립트가 필요하며 정책을 따라야합니다.

Q3 : 둘 중 더 좋은 것이 있습니까?

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

Q4 : 부팅하는 동안 실행할 스크립트를 포함시키는 올바른 방법입니까?

예. 일반적으로 응용 프로그램 / 패키지 작성자는 이러한 방식으로 수행합니다.

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