systemd를 사용하여 서비스/소켓 액세스/활성화 시간을 제한하는 방법은 무엇입니까?

systemd를 사용하여 서비스/소켓 액세스/활성화 시간을 제한하는 방법은 무엇입니까?

시스템 소켓으로 활성화된 간단한 시스템 서비스가 있습니다.

다음과 같이 간단합니다(약간 단순화됨).

$ systemctl cat example.socket 
# /usr/lib/systemd/system/example.socket
[Unit]
Description=Example Server socket

[Socket]
ListenStream=80
Accept=true

[Install]
WantedBy=sockets.target
$ systemctl cat [email protected] 
# /usr/lib/systemd/system/[email protected]
[Unit]
Description=Example Server

[Service]
StandardInput=socket
StandardOutput=socket
StandardError=journal
ExecStart=/usr/libexec/example
User=example

이제 내가 원하는 것은 기본을 구현하는 것입니다.방문 제한시간별. 즉, 소켓/서비스를 외부에서 활성화/액세스할 수 있는 시간을 제한하여 하루 중 특정 시간에만 사용할 수 있도록 하고 싶습니다.

이를 재정의하는 데 사용할 수 있는 옵션이 있다는 것을 알고 있지만 systemctl edit실제로 설정할 수 있는 옵션을 찾지 못했습니다.시스템 소켓에 대한 매뉴얼 페이지를 보았습니다.시간과 관련된 유일한 옵션은 TriggerLimitIntervalSec왼쪽과 오른쪽인데 내 요구 사항을 충족하지 않습니다.

xinetdx이를 비교하기 위해 동일한 작업을 수행하는 오래된 작은 도구 , 즉 소켓을 수신하고 요청 시 프로세스(서버)를 시작합니다.옵션이 있습니다access_times서비스를 사용할 수 있는 시기를 지정하는 데 사용할 수 있는 호출됩니다 . 하지만 그것을 다른 도구(/dependent)로 사용하는 것은 내가 원하는 것이 아닙니다. 내 목표는 systemd에 통합하는 방법입니다.

답변1

너 좀 써도 돼시스템 타이머필요한 시간에 소켓을 시작/중지합니다.

매일 아침 06:00에 일어나고 mysocket.socket매일 밤 23:00에 잠자리에 들려면 다음을 시도해 보세요.

# mysocket.timer
[Unit]
Description=Socket Wakeup

[Timer]
OnCalendar=6:00
Unit=mysocket.socket

[Install]
WantedBy=timers.target
# mysocket-bedtime.timer
[Unit]
Description=Socket Bedtime

[Timer]
OnCalendar=23:00
Unit=mysocket-bedtime.service

[Install]
WantedBy=timers.target
# mysocket-bedtime.service
[Unit]
Description=MySocket bedtime enforcer
Conflicts=mysocket.socket

[Service]
Type=oneshot
ExecStart=/bin/true

mysocket.timer매우 간단합니다. Unit=mysocket.socket매일 아침 06:00에 시작됩니다. 소켓을 중지하는 것은 약간 어렵습니다. 관계 가 필요합니다 Conflicts=. 우리는 mysocket-bedtime.timer매일 밤 23시에 충돌하는 유닛을 깨우도록 설계했습니다. mysocket-bedtime.service갈등을 겪고 있는 유닛입니다. 시작하기 위해 Conflicts=사용 중인 모든 항목(소켓)을 닫습니다. 그런 다음 소켓이 중지되면 실행된 true다음 자체적으로 중지됩니다.

관련 정보