在过去的两年里,Snapper 一直在完美地执行每小时快照(整点)。前几天我注意到二每小时拍摄一次快照。一个在整点 (HH:00),另一个在整点后 1 分钟 (HH:01)
snapper 日志文件显示这两个重复快照的 libsnapper 的相同进程 ID。每小时都会有一个新的进程ID,但是根据日志,重复的快照是由同一个进程ID执行的。在日志中,一切看起来都很正常。据我所知,这项工作只是重复了两次。
snapper list-configs
没有任何重复的配置。
我一直启用了一个 systemd 计时器并启动了 snapper-timeline.timer (这是根据Arch 的 Snapper 维基页面)。
我没有 root 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:我做了一个测试,证实了这个假设。看评论。]
答案1
这个答案归功于@jasonwryan。
据我们所知,从Arch Wiki Snapper 页面,在“自动时间线快照”下:
如果您有 cron 守护进程,此功能 [自动每小时快照] 应该会自动启动。
我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 中的结果行示例:
NoExtract = etc/cron.daily/snapper etc/cron.hourly/snapper
该解决方案适用于我的 cronie,但如果您使用不同的 cron 守护程序,您的路径可能会有所不同。