추가 읽기

추가 읽기

저는 가능한 한 많은 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가 있었습니다. 실제로 rcArch Linux에서는 systemd의 van Smoorenburg 호환성이 꺼져 있습니다. van Smoorenburg rc스크립트를 모든 사람이 실행할 수 있는 일종의 보편적 최소값으로 생각하세요.보조 명령의 변경 사항도 무시합니다.완전한 실수입니다. 당신의 목표는 잘못되었습니다.

모든 버전에 대해 단일 스크립트를 작성할 때 충족해야 하는 광범위한 차이점에 대한 개요를 얻으려면 2014년부터 rcvan 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가 아닌 운영 체제에서 실행될 수 있으며 자동 재시작은 이 세계의 기본 설정이기도 합니다.

추가 읽기

관련 정보