![Systemd:如果找到路径则启动服务,但仅限上午 9 点到下午 6 点之间](https://linux22.com/image/203059/Systemd%EF%BC%9A%E5%A6%82%E6%9E%9C%E6%89%BE%E5%88%B0%E8%B7%AF%E5%BE%84%E5%88%99%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%EF%BC%8C%E4%BD%86%E4%BB%85%E9%99%90%E4%B8%8A%E5%8D%88%209%20%E7%82%B9%E5%88%B0%E4%B8%8B%E5%8D%88%206%20%E7%82%B9%E4%B9%8B%E9%97%B4.png)
我想知道是否有某种方法可以同时具有路径单元和计时器的功能。这个想法是,如果在系统上找到路径,但仅在上午 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