在过去的两年里,Snapper 一直在完美地执行每小时快照(按小时)。几天前,我注意到每小时拍摄两张快照。一个在整点 (HH:00),另一个在整点后 1 分钟 (HH:01)
snapper 日志文件为这两个重复快照显示了 libsnapper 的相同进程 ID。每个小时都有一个新的进程ID,但是根据日志,重复的快照是由相同的进程ID执行的。在日志中,事情看起来很正常。据我所知,这项工作只是重复了两次。
snapper list-configs
没有任何重复的配置。
我一直为 snapper-timeline.timer 启用和启动 systemd 计时器(根据Arch 的 Snapper wiki 页面设置)。
我没有根 cron:
# crontab -l
no crontab for root
据我所知,任何用户都没有 cron:/var/spool/cron/
是空的。
这是真正奇怪的事情。停止和禁用后snapper-timeline.timer
,整点的快照停止,但整点后 1 分钟的快照继续。即使在重新启动后也是如此。
在上述步骤之后,systemctl 没有列出 snapper-timeline.timer 条目:
$ systemctl --user list-timers
0 timers listed.
$ sudo systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Wed 2018-02-21 00:00:00 EST 1h 40min left Tue 2018-02-20 00:00:00 EST 22h ago logrotate.timer logrotate.service
Wed 2018-02-21 00:00:00 EST 1h 40min left Tue 2018-02-20 00:00:00 EST 22h ago man-db.timer man-db.service
Wed 2018-02-21 00:00:00 EST 1h 40min left Tue 2018-02-20 00:00:00 EST 22h ago shadow.timer shadow.service
Wed 2018-02-21 03:54:50 EST 5h 35min left Tue 2018-02-20 03:54:49 EST 18h ago snapper-cleanup.timer snapper-cleanup.service
Wed 2018-02-21 03:59:50 EST 5h 40min left Tue 2018-02-20 03:59:49 EST 18h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2018-02-26 00:00:00 EST 5 days left Mon 2018-02-19 00:00:23 EST 1 day 22h ago fstrim.timer fstrim.service
更新:
正如我们从Arch Wiki Snapper 页面中所知道的,在“自动时间线快照”下:
如果您有 cron 守护程序,此功能 [自动每小时快照] 应该会自动启动。
正如我上面所说,我crontab -l
以 root 和我的用户身份进行了检查,两者都是空的。
但是,就我而言,我确实安装了 cronie(cronie 是一个 cron 守护程序)。查看/etc/cron.daily/
显示了一个 snapper 文件,/etc/cron.hourly/
还包含一个 snapper 文件。
剩下的问题是:
哪个用户的 crontab 会显示 Snapper cronjob?
有没有办法让 Snapper 的 cronjob 处于非活动状态,它会在包更新期间持续存在(同时保持 systemd 计时器处于活动状态)?我假设如果我只是删除
/etc/cron.daily
和 /etc/cron.hourly/` 中的条目,它们将在更新 Snapper 包时被替换。[更新 2:我做了一个测试来证实这个假设。看评论。]
这个答案归功于@jasonwryan。
正如我们从Arch Wiki Snapper 页面中所知道的,在“自动时间线快照”下:
crontab -l
我以 root 和我的用户身份检查,两者都是空的。但是,就我而言,我确实安装了 cronie(cronie 是一个 cron 守护程序)。软件包安装将 Snapper 时间线清理脚本
/etc/cron.daily/
和每小时快照脚本放置在/etc/cron.hourly/
. (即使已启用 Snapper systemd 单元,它也会这样做。)如果您更喜欢使用 systemd 计时器,但为一些奇怪的工作保留一个 cron 守护程序,那么 Snapper 将偏爱 cron 守护程序。
假设需要安装 cron 守护程序(就像我一样),但希望使用 systemd 管理 Snapper 计时器,解决方案(感谢@jasonwryan)如下:
编辑 /etc/pacman.conf`
取消注释
NoExtract
指令(如果已注释)。将 Snapper 包中的以下两个文件添加到
NoExtract
指令中等/cron.daily/snapper 等/cron.hourly/snapper
这里讨论了添加多个文件的语法:
多行文件列表的 pacman.conf NoExtract 语法 / Pacman 和软件包升级问题 / Arch Linux 论坛
/etc/pacman.conf 中的示例结果行:
该解决方案适用于 cronie,但如果您使用不同的 cron 守护程序,您的路径可能会有所不同。