사용자 정의 명령을 사용하여 서비스를 생성하여 systemd의 상태를 확인하세요.

사용자 정의 명령을 사용하여 서비스를 생성하여 systemd의 상태를 확인하세요.

일부 iptables 규칙을 설정하는 스크립트()가 있습니다 /bin/myrules.

이 단위 파일을 사용하여 systemd를 통해 시작합니다 myrules.service.

[Unit]
Description=My Rules

[Service]
Type=oneshot
ExecStart=/sbin/myrules start
ExecStop=/sbin/myrules stop
RemainAfterExit=no

[Install]
WantedBy=multi-user.target

스크립트가 실행되고 종료된 후 서비스가 "살아있다"는 것을 systemd가 알기를 원합니다(iptables 규칙이 올바르게 설정된 경우).

내 스크립트는 이미 iptables 규칙의 상태를 확인할 수 있습니다. 달리기:

/bin/myrules status

모든 것이 정상이면 종료 코드 0이 반환됩니다. 오류가 있으면 1이 반환됩니다.

systemctl status myrule명령이 내 특정 스크립트를 호출하여 상태가 정상인지 확인하고 그에 따라 메시지를 반환하도록 할 수 있습니까 ?

편집하다systemctl status myrules: 다음과 같은 것을 표시 해야 합니다.

Active: active (whatever)

[편집 2iptables] 다만 , 규정에 변경이 있는 경우에는다시 확인해야 한다모든 규칙이 활성화되면 다음이 표시됩니다.

Active: inactive (whatever)

이는 서비스 상태를 확인하기 위해 실행하는 경우 myrules status에만 가능합니다 .

추신: iptables에 대한 추가 정보는 필요하지 않습니다. -C 옵션을 사용하여 확인합니다.

답변1

원샷 유형의 경우 systemd는 프로세스를 실행하고 반환되면 프로세스가 완료된 것으로 간주하고 비활성 상태로 돌아가거나 RemainAfterExit=yes프로세스가 종료된 후에도 서비스를 활성 상태로 유지합니다.

ExecStart스크립트가 iptables 구성을 성공적으로 변경 하면 성공해야 하고 exit 0, 실패하면 성공해야 합니다 exit 1. RemainAfterExit=yes프로세스 를 성공적으로 사용한 후에 exit 0는 서비스가 활성화된 것으로 간주됩니다.

ExecStartPost=또한 상태 명령이 실패할 경우 서비스가 실패하도록 하는 run status 명령을 사용할 수도 있습니다 . 그러나 이는 또한 ExecStart명령을 받아야 함을 의미합니다 exit 0.

관련 정보