我有一个系统服务单位 OnCalendar
分配给它的计时器。该服务调用运行代码的jvm,而jvm只能按照特定的时间表启动。
这个systemd单元(以及其他几个)由ansible playbook管理,它使用openstack/ansible-role-systemd\u服务角色。每次我对systemd服务的单位文件进行一些更改时,它都会重新启动systemd服务。
此外,还有一个处理程序,每当gitlab ci管道运行这个ansible playbook并上传一个新的脚本时,它都会重新启动所有服务 .jar
服务器的工件。
是否有任何systemd内置机制来限制重新启动服务并为其分配计时器?不过,我必须能够在需要时手动停止/启动这些服务。
似乎我可以分叉的ansible角色,并添加一些检查,但我想知道一些本地和更直接的方式来实现这一点。
1条答案
按热度按时间mcdcgff01#
看来我找到了方法:
创建和不启用
.service
单位,包含下一个:创建并启用
.timer
单位,包含下一个:一点解释:
需要确保服务只有在上线后才能启动。
需要能够
kill
主进程,并使systemd重新启动服务,或停止服务w/o systemd标记它failed
. 这是因为当主进程收到SIGTERM
然后优雅地停下来。需要
.timer
为了理解这一点.service
停止了。不管怎样,.timer
会挂在墙上running
状态,下次不会运行服务。需要停止主进程将其信息日志写入syslog,并且只在其中写入错误。
因为必须禁用服务而忽略。不管怎样,它都会在系统启动时启动。
如果错过了目标时间,则需要能够在系统引导后的当天晚些时候启动服务。
遗漏原因
OnCalendar
使用了。所有这些变化似乎都起到了作用。