저는 현재 Debian 10 머신에서 소규모 서버로 실행하고 있습니다. aria2c를 설치해서 다운로드 서비스로 사용하고 있습니다. 지금까지는 모든 것이 괜찮을 것입니다. 내 질문은 다음과 같습니다
- init.d 스크립트를 사용하여 aria2c를 데몬으로 시작합니다.
- pid 파일이 작성됩니다.
- 프로세스를 확인해 보니 aria2c의 PID가 파일의 PID와 다릅니다.
누군가 이유를 설명할 수 있나요? (참고 - 이것은 기능상의 문제가 아닙니다. 이유를 알고 싶습니다. 아니면 제가 뭔가 잘못하고 있는 것일 수도 있습니다...)
$ cat /var/run/aria2c.pid
561
$ sudo /etc/init.d/aria2 status
...
CGroup: /system.slice/aria2.service
└─565 /usr/bin/aria2c --daemon=true --enable-rpc --conf-path=/etc/aria2.conf
$ pgrep aria2
565
$ ps ax | grep aria*
565 ? Ss 0:36 /usr/bin/aria2c --daemon=true --enable-rpc --conf-path=/etc/aria2.conf
$ cat /proc/56
56/ 565/
이것이 나에게 의미하는 바는 프로세스 561이 더 이상 존재하지 않는다는 것입니다. 그런데 왜 내 pid 파일에 이 PID가 있는 걸까요?
답변1
나는 당신이 언급한 다운로더 데몬에 대한 경험을 부인하지만...
- RC 스크립트를 직접 작성하셨나요?
aria2c
달릴 때 제대로 멈추나요/etc/init.d/aria2 stop
?(즉, 느린 프로세스가 남아 있지 않습니까?)
(1)이 "예"이고 (2)가 "아니요"인 경우 다음과 같은 이유일 수 있습니다.aria2c
진짜 일을 할 수 있는 아이를 낳아라, RC 스크립트에서 이를 제대로 억제하지 않았습니다.
많은 프로그램에는악마호출한 프로그램은 서브루틴에 대한 패턴을 생성하고악마:
- 이 프로그램은 하위 프로세스를 분기합니다.
- 하위 프로세스는 작업 디렉터리를
/
. - 하위 프로세스는 자체 표준 입력/출력/오류를 차단합니다.
- 하위 프로세스는 현재 세션에서 분리됩니다.
- 귀하가 호출한 상위 프로세스가 종료됩니다.
- 하위 프로세스는 실제 작업을 수행하기 위해 백그라운드에서 유지됩니다.
PID 파일에 캡처한 프로세스 ID는 아마도 종료된 상위 프로세스일 것입니다.
데몬( )을 중지하면 PID 파일의 프로세스 ID도 사용됩니다 /etc/init.d/aria2 stop
. 잘못된 경우(예: 실제 데몬 대신 종료된 상위 프로세스 참조) 결과적으로 데몬이 중지되지 않으며 수동으로 종료해야 합니다.
aria2c
솔루션을 실행할 필요가 없습니다.--daemon
범위, 자체 데몬화를 방지하기 위해(올바른 프로세스 ID를 PID 파일에 저장할 수 있도록) 다음을 수행해야 합니다.악마RC 스크립트에 직접 참여해 보세요.
PS 이미 aria2c
Debian을 통해 RC 스크립트를 실행하고 있는 경우start-stop-daemon
도우미님, 그러면 대부분의 작업이 완료되었습니다.하지만 당신은 또한 제안 --background
하고 --chdir /
선택 해야start-stop-daemon
.