n 초 후에 systemd가 서비스 상태를 확인하도록 강제합니다.

n 초 후에 systemd가 서비스 상태를 확인하도록 강제합니다.

나는 나에게 약간의 두통을 일으키는 (heka용) 시스템 서비스를 가지고 있습니다.

문제는 시작 직후 heka 데몬이 종료되더라도 "start"가 성공적으로 반환된다는 것입니다. 예를 들어 구성 파일이 잘못된 경우 이런 일이 발생합니다. 프로세스가 시작되고 구성을 확인한 후 찾은 내용이 만족스럽지 않으면 종료됩니다. 이 경우 Systemd는 성공적으로 반환됩니다.

초기화 후 systemd가 프로그램 상태를 확인하도록 강제할 수 있는 방법이 있습니까? 프로세스가 시작된 후 몇 초 후에 잠을 자도 될까요?

스크립트는 다음과 같습니다.

    [Unit]
    Description=Heka event/metric/log collection and routing daemon
    After=network.target auditd.service
    ConditionPathExists=!/etc/heka/hekad_not_to_be_run

    [Service]
    EnvironmentFile=-/etc/default/heka
    Type=simple
    PIDFile=/var/run/hekad.pid
    ExecStart=/usr/bin/hekad -config=/etc/heka
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    StandardError=inherit

    [Install]
    WantedBy=multi-user.target
    Alias=heka.service

답변1

여러 ExecPostStart 명령을 함께 연결할 수 있습니다. 그리고 기본 ExecStart가 실패하더라도 다음을 추가하여 실행할 수 있습니다.-/(systemd.service: 유형=). 이 같은:

ExecStart=-/usr/bin/hekad -config=/etc/heka
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null

이렇게 하면 MAINPID예를 들어 서비스를 중지하거나 다시 시작할 때 계속 사용할 수 있습니다.

답변2

아직 살아 있는지 확인하는 쉬운 방법이 있다면 먼저 X초 동안 휴면하는 루프가 있는 작은 스크립트를 hekad사용하여 데몬을 시작한 ExecStartPre=/usr/bin/hekad -config=/etc/heka다음 hekad 데몬이 여전히 실행 중인지 확인합니다. 루프가 중지된 것처럼 보이는 ExecStart경우에만 루프를 끊습니다 .hekad

답변3

ExecStartPost대기 상태에 있는 명령이나 스크립트를 실행한 다음 검사를 실행하는 데 사용해야 합니다 . 이것이 0이 아닌 값으로 종료되면 장치는 오류로 간주됩니다.

보다:https://www.freedesktop.org/software/systemd/man/systemd.service.html

관련 정보