나는 최근 Linux 2.6을 실행하는 ARM 머신에서 init 시스템을 sysvinit에서 runit으로 전환하여 큰 성공을 거두었습니다. 그러나 초기화 루틴을 미세 조정하려고 합니다. 나는 "oneshot" 시스템 서비스와 비슷한 것을 원합니다.
초기화 루틴의 일부는 디스크를 포맷한 다음 마운트해야 한다는 것입니다. runit 서비스 중 하나는 설치되는 이 디스크에 따라 달라집니다. 그러나 나머지 서비스(예: sshd)는 그렇지 않습니다. 따라서 시스템의 나머지 부분이 초기화되는 동안 백그라운드에서 디스크 포맷 프로세스를 시작할 수 있다면 좋을 것입니다. 디스크 포맷은 매우 느리므로 백그라운드에서 수행할 수 있으면 전체 부팅 시간에 상당한 영향을 미칠 수 있습니다.
아직 포맷되지 않은 경우 디스크를 안정적으로 포맷하는 디스크 포맷 스크립트가 있습니다 /usr/local/bin/format_disk.sh
(이미 포맷된 경우 아무 작업도 하지 않음). 현재 고려중인 옵션은 다음과 같습니다.
- 수동 실행
sudo /usr/local/bin/format_disk.sh
: 지금 하고 있는 작업이지만 사용자 개입 없이 시스템이 완전히 초기화될 수 있도록 프로세스를 자동화하고 싶습니다. /usr/local/bin/format_disk.sh
스크립트 내에서 실행/etc/runit/1
: 디스크가 포맷될 때까지 서비스가 시작되지 않으므로 이상적이지 않습니다.- 실행된 다음 종료/루프/등을 수행하는 runit 서비스를 만듭니다
/usr/local/bin/format_disk.sh
. 이는 실제로 데몬이 아니고 시스템 가동 시간 동안 계속 실행되어야 하기 때문에 이상적이지 않습니다. 어쩌면 내가sv stop
스스로 실행하게 할 수 있을까요?
에서 비슷한 일을 할 수 있다면 /usr/local/bin/format_disk.sh &
좋겠지만 /etc/runit/1
, 종료하기 전에 runit이 여전히 서비스를 시작하지 않을 것 같습니다 format_disk.sh
. 이 의혹이 맞나요? /etc/runit/1
서비스가 시작될 수 있도록 백그라운드 프로세스를 시작하는 다른 방법이 있습니까 ?
runit 시스템의 백그라운드에서 초기화 단계를 실행하는 가장 좋은 방법은 무엇입니까?
답변1
두 가지 옵션:
- 종속 서비스의 실행 스크립트에서 이 스크립트를 호출합니다. 이렇게 하면 서비스가 실행되기 전에 스크립트가 반환됩니다.
- 백그라운드에서 스크립트를 실행
/etc/rc.local
하고 완료 후 스크립트가 tmpfs 파일을 터치하도록 합니다. 그런 다음 종속 서비스의 실행 스크립트에서 파일이 존재하는지 확인하십시오.