Bash 스크립트를 원해요충분히systemd
내가 아는 한, 특정 서비스 전에는 작동합니다(시작만 하는 것이 아님). 솔루션이 서비스 전에 완료되는 경우도 있습니다.내 자신의서비스가 종료되었습니다.
웹 검색을 통해 시작하는 방법에 대한 질문이 나올 수 있습니다. 내가 이해하는 바에 따르면, Before=
옵션은 장치가 시작될 때까지 기다리는 것입니다. 그래서 읽을 때 man systemd.service
하나의 옵션만 표시됩니다 Type=forking
. ::
상위 프로세스가 종료되면 서비스 관리자는 해당 장치가 시작된 것으로 간주합니다.
비록 스크립트에서 어떤 프로세스도 포크하지 않았지만. 내가 바로 여기 있나요? 이는 Before=
서비스가 시작되기 전에 내 스크립트가 완료된다는 것을 보장합니까(오류 등 제외) ?
예를 들어 다른 유형은 Type=exec
다음과 같습니다 .
"그리고 서비스 프로세스의 fork()와 execve()가 모두 성공할 때까지 exec는 계속되지 않습니다."
proceed
여기서 무슨 뜻인지 잘 모르겠고 , 그것을 읽으면 systemd가 성공했는지 man execve
어떻게 알 수 있는지 이해할 수 없습니다 .execve
execve()는 성공 시 반환하지 않고 호출 프로세스의 텍스트, 초기화된 데이터, 초기화되지 않은 데이터(bss) 및 스택을 새 로더의 내용에 따라 덮어씁니다.
내가 아는 한, 다른 유형(notify, dbus)에는 man
프로세스가 시작될 때 특별한 기능이 필요합니다.
답변1
나는 당신이 꽤 잘 type=oneshot
사용할 수 있다고 생각합니다 RemainAfterExit=true
.문서
그러나 oneshot은 단순하게 작동합니다.기본 프로세스가 종료된 후 서비스 관리자는 장치가 시작되는 것으로 간주합니다.. 그런 다음 후속 장치를 시작합니다.
RemainAfterExit=
이러한 서비스에 특히 유용합니다. 둘 다 지정되지 않은 경우Type=oneshot
기본값은 암시적입니다. 서비스 없이 이 옵션을 사용하는 경우 서비스는 "활성" 장치 상태로 전환되지 않고 "활성화"에서 "비활성화" 또는 "비활성"으로 직접 전환됩니다. 구성이 연속 실행 프로세스가 아니기 때문입니다. 특히 이는 이러한 유형의 서비스가 실행된 후(아직 설정되지 않은 경우) 이후에 시작된 것으로 나타나지 않고 오히려 죽은 것으로 나타남을 의미합니다.Type=
ExecStart=
RemainAfterExit=
RemainAfterExit=
아직 명확하지 않을 수도 있습니다.주요공정예, 하지만 설명을 보면 다음을 알 수 있습니다 ExecStart=
.
설정 하지 않으면
Type=forking
이 명령줄을 통해 시작된 프로세스는 데몬의 기본 프로세스로 간주됩니다.
편집하다
이는 여러 옵션을 허용하는 Type=oneshot
유일한 유형입니다 . ExecStart=
나타나는 순서대로 순차적으로 실행되며, 각 프로세스는 실행 시 자체 마스터 프로세스가 됩니다.
설명서를 다시 확인하세요.
실행 시작 =
이 서비스를 시작할 때 실행할 명령입니다. 값은 아래 "명령줄" 섹션에 설명된 규칙에 따라 0개 이상의 명령줄로 분할됩니다.
Type=이 일회성인 경우가 아니면 명령을 제공해야 합니다. Type=oneshot을 사용하면 0개 이상의 명령을 지정할 수 있습니다.동일한 지시문에 여러 명령줄을 제공하여 명령을 지정할 수도 있고, 동일한 효과를 얻기 위해 지시문을 여러 번 지정할 수도 있습니다. 이 옵션을 빈 문자열로 지정하면 재설정할 명령 목록이 재설정되고 이 옵션의 이전 지정은 적용되지 않습니다. ExecStart=가 지정되지 않은 경우 서비스는 RemainAfterExit=yes와 최소한 하나의 ExecStop= 행을 설정해야 합니다. (ExecStart= 및 ExecStop=이 누락된 서비스는 유효하지 않습니다.)
여러 명령이 지정되면 유닛 파일에 나타나는 순서대로 호출됩니다.명령 중 하나가 실패하면("-" 접두사가 붙지 않음) 다른 행은 실행되지 않고 장치는 실패한 것으로 간주됩니다.