일부 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
.