임베디드 Linux 시스템이 있는데 제가 만든 특정 서비스가 실행 중일 때 종료하는 데 시간이 오래 걸립니다. 가능한 한 빨리 실행을 시작해야 하므로 DefaultDependency=no 옵션을 설정합니다.
내가 달릴 때
systemctl stop myService
예상대로 작동하고 서비스가 즉시 중지됩니다.
하지만 내가 달릴 때
shutdown now
서비스가 계속 실행되는 것을 볼 수 있습니다(LED가 계속 변경됨). 서비스가 실행되는 실행 파일에는 SIGTERM 및 SIGINT에 대한 신호 처리기가 있습니다.
실행 파일을 수동으로 실행하고 ctrl+c를 눌러 SIGINT를 보내면 제대로 중지됩니다.
안타깝게도 Journalctl에서 좋은 로그 정보를 얻을 수 없습니다.
어떻게 이런 일이 일어났는지 아는 사람 있나요?
종료하면 systemctl이 트리거되어 모든 서비스가 중지되지 않나요?
정상적으로 종료되도록 하려면 다른 것을 지정해야 합니까?
편집: 요청 시 서비스 이용 가능
### My service###
[Unit]
Description=My service
DefaultDependencies=no
[Service]
CPUAffinity=3
ExecStart=/path/to/startscript.sh
Type=simple
[Install]
WantedBy=sysinit.target
시작 스크립트는 수동 업데이트 후에 실행 권한이 손실될 수 있으므로 실행 파일에 실행 권한이 있는지 확인합니다. 그럼 다음과 같이 실행
nice -n -20 /path/to/exe.elf
실행 파일은 우선 순위가 매우 높으며 자체 CPU와 높은 친절도를 갖습니다.
답변1
왜 설정했는가 DefaultDependencies=no
? 이는 일부 특이한 사용 사례에만 필요합니다.
systemd.service(5) 맨페이지에는 다음이 표시됩니다.
기본 종속성 DefaultDependency=no가 설정되지 않은 경우 다음 종속성이 추가됩니다.
• 서비스 단위는 sysinit.target에 대해 Requires= 및 After= 유형의 종속성, basic.target에 대해 After= 유형의 종속성, shutdown.target에 대해 Contributes= 및 Before= 유형의 종속성을 갖습니다. 이를 통해 일반 서비스 장치는 기본 시스템 초기화를 수행하고 시스템 종료 전에 완전히 종료됩니다. 조기 시작 또는 지연된 시스템 종료와 관련된 서비스만 이 옵션을 비활성화해야 합니다.
[...]
정말로 필요하거나 설정하려는 경우 대상을 포함하여 종속성을 수동으로 명시적으로 설정 DefaultDependencies=no
해야 합니다.After=/Before=/Conflicts=
shutdown.target
Nice=
편집: 그런데, .service 파일에 해당 속성이 있다는 것을 알고 계셨습니까? (systemd.exec(5) 매뉴얼 페이지 참조), nice
실행 파일을 호출하지 않고