システムソケットで有効になっている簡単なシステムサービスがあります。
次のように簡単です(少し簡単になります)。
$ 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
今私が望むのは基本を実装することです。訪問制限時間別。つまり、ソケット/サービスを外部で有効/アクセスできる時間を制限して、1日の特定の時間にのみ使用できるようにしたいと思います。
これをオーバーライドするために使用できるオプションがあることはわかっていますが、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
自体が停止します。