如何为连续运行的应用程序创建 systemd 服务(仅在时间窗口内)

如何为连续运行的应用程序创建 systemd 服务(仅在时间窗口内)

我有一个软件,基本上可以连续分析相机流并将一些信息发送到服务器,这是一个无头系统(Ubuntu 16.04)。申请必须每天(周日除外)上午 7:30 开始,晚上 10 点停止。该应用程序必须在该时间窗口内的任何时间运行,因此必须在崩溃和断电的情况下重新启动(托管该软件的计算机设置为断电后开机),但前提是我们处于时间窗口。目前我正在使用这些 cronjobs

* 7-21 * * 1-6 check-software.sh 
00 22 * * 1-6 killall mysoftware

check-software.sh 看起来像:

#!/bin/bash

check_process() {
if ps aux | grep "[m]ysoftware"
then
    return 1
else 
    return 0
fi
}

check_process   
if (test $? -eq 0)
then
    echo mysoftware not running 
    ./mysoftware
else
    echo mysoftware running
fi

它工作正常,但我想使用 systemd 服务而不是 cron..所以我尝试以这种方式将服务与计时器一起使用。

myservice.service.config/systemd/user

[Unit]
Description=My Software
StartLimitInterval=0

[Service]
Type=simple
Restart=always
RestartSec=10
WorkingDirectory=/opt/mysoftware
ExecStart=/opt/mysoftware/mysoftware
ExecStartPost=/home/myuser/clear_timer.sh

mytimer.timer.config/systemd/user

[Unit]
Description=Run my software

[Timer]
OnCalendar=Mon-Sat 07:29:00
Persistent=true

[Install]
WantedBy=timers.target

clear_timer.sh这是:

#!/bin/bash

rm ~/.local/share/systemd/timers/*
export XDG_RUNTIME_DIR=/run/user/1000
systemctl --user restart mytimer.timer

在我看来,clear_timer 应该可以解决这个问题,删除计时器的最后一次执行,这样当断电时,如果经过了 7:30,计时器就会意识到它以前从未触发过并触发。然而这不起作用!如果 7:30 之后断电,则软件不会启动,否则此方法将按预期工作(但我总是需要一个 cronjob 在晚上 10 点停止软件)。任何想法?

相关内容