Systemd:如果找到路径则启动服务,但仅限上午 9 点到下午 6 点之间

Systemd:如果找到路径则启动服务,但仅限上午 9 点到下午 6 点之间

我想知道是否有某种方法可以同时具有路径单元和计时器的功能。这个想法是,如果在系统上找到路径,但仅在上午 9 点到下午 6 点之间,则启动特定服务。

目前,我有以下路径/服务,ffmpeg每次 USB 摄像头可用时都会启动该路径/服务/dev/video4

相机路径

[Unit]
Description=USB Camera Stream Service Path

[Path]
PathExists=/dev/video4
Unit=camera.service

[Install]
WantedBy=multi-user.target

相机服务

[Unit]
Description=USB Camera Stream Service

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/bin/ffmpeg -f v4l2 -input_format h264 -video_size 1920x1080 -i /dev/video4 -copyinkf -codec copy -f flv rtmp://127.0.0.1/live/stream

注意:我还希望能够systemctl start camera.service随时运行以手动启动服务。

谢谢。

答案1

最简单的方法可能是systemd执行一个脚本来测试当前时间并在指定的范围内执行您的命令。

创建脚本,例如/usr/local/bin/myscript

#!/bin/sh
if [ $(date +%H) -ge 9 -a $(date +%H) -le 18 ]; then
    ffmpeg -f v4l2 -input_format h264 -video_size 1920x1080 -i /dev/video4 -copyinkf -codec copy -f flv rtmp://127.0.0.1/live/stream
fi

请务必授予脚本执行权限:

sudo chmod +x /usr/local/bin/myscript

然后更改此行camera.service

ExecStart=/usr/bin/ffmpeg -f v4l2 -input_format h264 -video_size 1920x1080 -i /dev/video4 -copyinkf -codec copy -f flv rtmp://127.0.0.1/live/stream

对此:

ExecStart=/usr/local/bin/myscript

相关内容