V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jasonyang9
V2EX  ›  问与答

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

  •  
  •   jasonyang9 · 2021-04-12 09:18:11 +08:00 · 1024 次点击
    这是一个创建于 1319 天前的主题,其中的信息可能已经有所发展或是发生改变。

    总体结构是这样的,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/目录下有所有需要触发的服务单元的软连接。

    小结:

    • 某个用定时器触发,顺序启动的服务单元静默不启动运行
    • 没有相关日志
    • 手动可以成功运行该服务,也会产生日志

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

    2 条回复    2021-05-08 17:55:02 +08:00
    jasonyang9
        1
    jasonyang9  
    OP
       2021-04-12 16:01:28 +08:00
    折腾了半天发现是依赖`Requires=mnt-nas2.mount`在用`.target`触发时不会满足,不会自动挂载文件系统。而在手动执行`systemctl start self-backup.service`时却能够加载。是 BUG 么?
    julyclyde
        2
    julyclyde  
       2021-05-08 17:55:02 +08:00
    给 systemd 开详细日志试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.