我如何configurationsystemd服务来定期重启?

我有一个简单的系统服务,需要定期重新启动,以防止它的进程被窃听。 是否有systemd服务的configuration选项来定期重新启动它们? 所有Restart*选项似乎都与退出时重新启动服务有关。

Solutions Collecting From Web of "我如何configurationsystemd服务来定期重启?"

是的,您可以通过使您的Type=notify服务定期重新启动服务。 在服务文件的[Service]部分添加此选项,并将Restart=always并给予WatchdogSec=xx ,其中xx表示您希望重新启动服务的时间段。 这里你的进程会在xx时间后被systemd杀死,并且会被systemd重新启动。 例如。

 [Unit] . . [Service] Type=notify . . WatchdogSec=10 Restart=always . . [Install] WantedBy= .... 

我看到这里的解决方案看起来很优雅,如果有点迂回。 关键的想法是创建一个由重启另一个服务的定时器触发的一次性服务。

对于定时器:

 [Unit] Description=Do something daily [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timer.target 

对于一次性服务:

 [Unit] Description=Restart service [Service] Type=oneshot ExecStart=/usr/bin/systemctl try-restart my_program.service 

这个解决方案可以让您利用systemd的定时器,包括在一天的特定时间重新启动服务的能力,而不仅仅是经过一段时间之后。

只是一些替代方法最终达到相同的目标:

  • 如果你可以控制服务的实现,你可以在一段时间后自动结束,例如,在迭代次数达到一定次数后退出,或者使用超时定时器和一个处理程序sendin本身SIGTERM / SIGKILL
  • 如果志愿服务结束是不可行的或实际的,你可能会有一个小的基于cron的脚本来终止服务进程。