我遇到了一个问题,我有一堆 systemd 计时器设置为按计划运行以执行各种与备份相关的任务。他们在指定的时间成功运行。但是,它们也会在系统启动时运行,我想避免这种情况。例如,我有一个需要几个小时才能完成的远程 rsync,它只需要在晚上运行一次,而不是在重新启动时运行。
这是一个示例计时器:
[Unit]
Description=Run Remote rsync
Requires=remote-backup.service
[Timer]
OnCalendar=*-*-* 4:00:00
RandomizedDelaySec=1h
Persistent=false
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)
这是它运行的服务:
[Unit]
Description=Remote backup
After=zfs.target network-online.target
OnFailure=status-email-root@%n.service
[Service]
Type=oneshot
ExecStartPre=/path/to/pre-backup script
ExecStart=/path/to/backup-script
ExecStartPost=/path/to/post-backup script
Run Code Online (Sandbox Code Playgroud)
(备份前和备份后脚本会 ping 运行状况检查 URL,以便我获得成功/失败/等报告。)
问题是它应该只在凌晨 4 点运行,但如果我重新启动它会尝试在启动时运行。我试过改成Persistentfalse 没有效果。我想保持它的真实性,因为如果备份真的失败或没有运行,我想重新运行它,但不是每次都运行它!
我也尝试删除WantedBy但这只是让事情永远不会运行,我也尝试更改Type服务但没有成功。
如果有人有任何见解,我将不胜感激。谢谢!
如果其他人也遇到同样的问题,reddit 上的 /u/stormcloud-9可以帮助我解决这个问题。结果我需要删除计时器单元中的“需要”行。我没有意识到的是,systemd 计时器会自动绑定到具有相同文件名的服务器(例如 XXX.timer 自动调用 XXX.service),除非用 Unit= 指令覆盖。
每次系统启动并且计时器启动时,由于 Requires= 行,它都会不必要地启动服务。
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |