多个由 systemd timer 触发的每日备份任务中有一个静默不启动

2021-04-12 09:18:11 +08:00
 jasonyang9

总体结构是这样的,daily-timer.timer设定每天半夜 2 点随机延迟 3600 秒触发daily-timer.target,多个.service服务单元设定[Install]WantedBy=daily-timer.target。 各.service服务单元的[Service]Type=oneshot,为了顺序而不是并发启动,在[Unit]中设定After=

现在的情况是其中一个self-backup.service,是排在最后启动的,实际却静默不启动,没有错误日志。其它几个服务都成功。

先贴上这个服务的配置。

$ systemctl cat self-backup.service
# /etc/systemd/system/self-backup.service
[Unit]
Description=Self Backup
Requires=mnt-nas2.mount
After=mnt-nas2.mount
After=reboot4.service

[Service]
Type=oneshot
ExecStart=/root/sh/backup/self-backup.sh

[Install]
WantedBy=daily-timer.target

日志空空如也。

$ sudo journalctl --unit=self-backup.service
$ sudo journalctl --priority=err --unit=self-backup.service
$ sudo journalctl --priority=debug --unit=self-backup.service

没有启动或没启动的任何日志。

尝试手动启动这一个服务是成功的,也会有日志记录。

$ sudo systemctl start self-backup.service
$ sudo journalctl --unit=self-backup.service

但就是无法被 Timer 触发。

$ sudo systemctl list-dependenies self-backup.service
self-backup.service
● ├─mnt-nas2.mount
● ├─system.slice
● └─sysinit.target
●   ├─apparmor.service
●   ├─blk-availability.service
●   ├─dev-hugepages.mount
●   ├─dev-mqueue.mount
●   ├─keyboard-setup.service
●   ├─kmod-static-nodes.service
●   ├─lvm2-lvmpolld.socket
●   ├─lvm2-monitor.service
●   ├─nftables.service
●   ├─proc-sys-fs-binfmt_misc.automount
●   ├─sys-fs-fuse-connections.mount
●   ├─sys-kernel-config.mount
●   ├─sys-kernel-debug.mount
●   ├─systemd-ask-password-console.path
●   ├─systemd-binfmt.service
●   ├─systemd-hwdb-update.service
●   ├─systemd-journal-flush.service
●   ├─systemd-journald.service
●   ├─systemd-machine-id-commit.service
●   ├─systemd-modules-load.service
●   ├─systemd-random-seed.service
●   ├─systemd-sysctl.service
●   ├─systemd-sysusers.service
●   ├─systemd-timesyncd.service
●   ├─systemd-tmpfiles-setup-dev.service
●   ├─systemd-tmpfiles-setup.service
●   ├─systemd-udev-trigger.service
●   ├─systemd-udevd.service
●   ├─systemd-update-utmp.service
●   ├─cryptsetup.target
●   ├─local-fs.target
●   │ ├─-.mount
●   │ ├─boot.mount
●   │ ├─systemd-fsck-root.service
●   │ └─systemd-remount-fs.service
●   └─swap.target
●     └─dev-mapper-vestro\x2d\x2dvg\x2dswap_1.swap

可以确定self-backup.service是被daily-timer.target所依赖的,在/etc/systemd/system/daily-timer.target.wants/目录下有所有需要触发的服务单元的软连接。

小结:

各位彦祖,请教这可能是什么问题导致的,其次遇到这种问题用什么办法来排错和调试?谢谢

840 次点击
所在节点    问与答
2 条回复
jasonyang9
2021-04-12 16:01:28 +08:00
折腾了半天发现是依赖`Requires=mnt-nas2.mount`在用`.target`触发时不会满足,不会自动挂载文件系统。而在手动执行`systemctl start self-backup.service`时却能够加载。是 BUG 么?
julyclyde
2021-05-08 17:55:02 +08:00
给 systemd 开详细日志试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/769972

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX