Systemd 计时器仅在服务停止时启动

Systemd 计时器仅在服务停止时启动

我有一个运行 python 脚本的服务:

[Unit]
Description="Daily python service"

[Service]
WorkingDirectory=/home/ubuntu/python_project/
ExecStartPre=/bin/bash -c 'truncate -s 0 /var/log/project.log /var/log/project_error.log'
ExecStart=/home/ubuntu/.conda/envs/test/bin/python -u main.py
StandardOutput=append:/var/log/project.log
StandardError=append:/var/log/project_error.log

[Install]
WantedBy=multi-user.target

我希望它每天在特定时间运行:

[Unit]
Description=Run service daily

[Timer]
OnCalendar=*-*-* 12:00:00
Persistent=true

[Install]
WantedBy=timers.target

当我重新加载守护程序、启用计时器并启动计时器时,它会在第一天运行。但第一天之后它会自动停止运行,除非我手动停止该服务。

为什么会发生这种情况?我该如何解决这个问题?

答案1

这是我如何做类似事情的示例。在此示例中,我每小时调用该服务,因此请根据需要调整您的服务:

/etc/systemd/system/btrfsbk.service

[Unit]
Description=Create mirror of current state of all BTRFS snapshots

[Service]
Type=simple
ExecStart=/usr/local/sbin/btrfsbk

/etc/systemd/system/btrfsbk.timer

[Unit]
Description=Create mirror of current state of all BTRFS snapshots

[Timer]
Unit=btrfsbk.service
OnBootSec=15min
OnUnitActiveSec=60min
AccuracySec=1us
Persistent=True

[Install]
WantedBy=timers.target

请注意,我的 .service 文件中没有 [Install] 部分;无需启用此功能,因为它将由计时器激活。

对于另一个例子,请查看弗斯特里姆服务/计时器文件。

相关内容