저는 가능한 한 많은 sysvinit 시스템에서 실행될 수 있는 크로스 플랫폼 sysvinit 서비스를 작성하려고 합니다.
나에게 필요한 것:
프로세스에 데몬이 필요합니다(실행 시 자동으로 데몬화되지 않음).
충돌이 발생하면 프로세스를 다시 시작해야 합니다.
명령을 사용하여 start-stop-daemon
데몬을 구현했지만 이것이 항상 존재하는 것은 아니라는 점을 이해합니다. start-stop-daemon
크로스 플랫폼 기능을 구현하는 보다 표준적인 방법이 있습니까 ?
또한 충돌이 발생하면 프로세스가 자동으로 다시 시작되는지 확인해야 합니다. 이를 달성하는 가장 좋은 크로스 플랫폼 방법은 무엇입니까?
update-rc.d
명령이 항상 존재하지 않는 것도 가능합니까 ? 그렇다면 대신 무엇을 사용해야 합니까?
이것은 지금까지 내 sysvinit 스크립트입니다.https://gist.github.com/banister/40775de6a3778e1439d2f776d290073d
감사해요!
답변1
하나할 수 있는rc
이를 수행하려면 van Smoorenburg 스크립트를 작성하세요 . 그것들은 결국 스크립트의 각 개별 단계의 구성이 됩니다 case
. esac
이는 유지 관리가 불가능합니다.
이는 이 메커니즘의 알려진 문제 중 하나입니다.
그 외에도 van Smoorenburg rc
스크립트는 수년간 Ubuntu와 Fedora에서 작업을 수행하는 방법이 아니었습니다. 두 경우 모두 systemd를 사용하기 전에 Upstart가 있었습니다. 실제로 rc
Arch Linux에서는 systemd의 van Smoorenburg 호환성이 꺼져 있습니다. van Smoorenburg rc
스크립트를 모든 사람이 실행할 수 있는 일종의 보편적 최소값으로 생각하세요.보조 명령의 변경 사항도 무시합니다.완전한 실수입니다. 당신의 목표는 잘못되었습니다.
모든 버전에 대해 단일 스크립트를 작성할 때 충족해야 하는 광범위한 차이점에 대한 개요를 얻으려면 2014년부터 rc
van Smoorenburg 스크립트를 작성하는 데비안 방식이 다음과 같이 문서화되어 있다는 점을 고려하십시오.
#!/lib/init/init-d-script ## 초기화 정보 시작 # 제공: myvpn # 필수 시작: $network $local_fs $remote_fs # 중지해야 하는 항목: $network $local_fs $remote_fs #기본 시작: 2 3 4 5 #기본 정지: 0 1 6 # 간단한 설명: 나의 VPN 서비스 # 설명: 이 스크립트는 MY VPN 데몬 프로세스를 시작합니다. ### 초기화 정보 종료 DAEMON=/opt/myvpn/bin/myvpn-데몬 이름=myVPN LD_LIBRARY_PATH 내보내기=/opt/myvpn/lib
이는 스크립트보다 훨씬 짧으며 추가 콘텐츠를 위한 공간이 있습니다. 대략적으로 시스템화된 서비스 단위를 예로 들어보겠습니다.
% 고양이 myvpn.service [단위] 설명=MyVPN 서비스 [제공하다] ExecStart=/opt/myvpn/bin/myvpn-daemon 환경=LD_LIBRARY_PATH=/opt/myvpn/lib 재시작=항상 [설치하다] WantedBy=다중 사용자.대상 %
...변환하고...
%SystemControlTranslation systemd-units --no- Generation-comment ./myvpn.service %
...daemontools 서비스 정의 제품군(이 경우 nosh 도구 세트 사용)이 어떻게 보이는지 보여줍니다.
% 시스템 제어 인쇄 서비스 스크립트./myvpn 시작: #!/bin/nosh 시작: 사실 중지: #!/bin/nosh 중지: 사실 실행: #!/bin/nosh 실행: #myVPNService 실행: 제어 그룹 ../myvpn.service로 이동합니다. 실행: getuidgid 실행: userenv-fromenv 실행: setenv LD_LIBRARY_PATH /opt/myvpn/lib 실행: chdir/ 실행: /opt/myvpn/bin/myvpn-daemon 다시 시작: #!/bin/sh 재부팅: 절전 0.1 restart:exec true # 스크립트 매개변수를 무시합니다. %
Daemontools 서비스 관리자 제품군은 Linux가 아닌 운영 체제에서 실행될 수 있으며 자동 재시작은 이 세계의 기본 설정이기도 합니다.
추가 읽기
- /etc/init.d/bones는 어디에 있습니까?
- https://unix.stackexchange.com/a/202731/5132
- 조나단 데보인 폴라드(2015).시스템 5의 알려진 문제
rc
. 자주 주어지는 답변입니다.