自升级以来,我的用户的crontab已被清除。这不是今年第一次发生,每次都很难恢复。

我希望能够为我的用户备份crontab,但为此我需要知道它的存储位置。

评论

如果有人也可以给出原因,为什么会被删除

@WalterTross是的,这很烦人。我想这是更新cron包的副作用,但我同意-这不是应该发生的事情。

呃,我不知道每次cron软件包升级都会删除用户cron!

@ pl1nk我不知道是什么清除了它,但它确实一直在发生。我猜机器里有鬼。

只是想提一下,这里有关于如何使用日志重建意外删除的crontab的说明:superuser.com/questions/384109/crontab-deleted并不是您真正要问的,但可能对某人有用。 >

#1 楼

实际上,不建议手动处理这些文件。根据crontab手册页:


每个用户都可以拥有自己的crontab,尽管这些是/var/spool/cron/crontabs中的文件,但它们并非要直接编辑。


/var/spool下的文件被认为是临时文件/工作文件,这就是为什么它们可能在升级期间被删除的原因,尽管仔细研究cron软件包的升级脚本可能对此有所了解。 />
无论如何,备份cron条目或将其保存在主目录中的文件始终是一个好习惯。

我假设您正在使用crontab -e在苍蝇。如果是这样,您可以通过执行crontab -l获得crontab文件的“副本”。通过管道将其传输到文件以获取“备份”:

crontab -l > my-crontab


然后您可以编辑my-crontab文件以添加或修改条目,然后“安装”通过将其提供给crontab:

crontab my-crontab


此语法检查与crontab -e相同。

评论


crontab -l比通过/ var / spool / cron / crontabs / $ USER容易,主要是因为对该文件具有奇异的权限。

–奥利♦
2012年11月13日16:02

cron的iptables保存。很好

–Parthian Shot
15年7月18日在0:10

也许我们应该放置一个crontab来自动备份> :)?

– PascalVKooten
15年7月27日在16:28

当您要管理或检查来自多个用户的crontab时,通过/ var / spool / cron / crontabs进行浏览很方便。

–dhasenan
16年8月6日在14:59

在您不熟悉的服务器上调查谜题时,通常使用sudo grep -rHin“ $ string” / etc / cron *(其中string可能是诸如docker,lftp,iptables等的命令)。还要检查用户crontabs。这就是导致我进行此问答的原因。sudo grep -rHin“ $ string” / etc / cron * / var / spool / cron *

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
17-12-29 17:10



#2 楼

它存储在用户名下的/var/spool/cron/crontabs文件夹中。

#3 楼

我终于找到了为什么我的crontabs和Postfix安装在启动后仍然中断的原因。这是一个非常愚蠢的原因,但是...

我将/var/spool安装为tmpfs RAM驱动器。 SSD进行了调整,以延长我的SSD的寿命。这样做时,我盲目地安装了/tmp/var/tmp/var/spool作为tmpfs,而没有考虑到影响。我认为/var/spool就像/proc//run/一样,它仅在会话期间有用。我显然错了。

评论


将/ tmp挂载为tmpfs应该是安全的,但不能挂载/ var / tmp或/ var / spool。 / tmp用于临时存储,重新启动后可能会丢失。 / var / tmp用于临时存储,该存储将在重新引导后保留。正如您所发现的,/ var / spool用于处理数据,在重新启动后该数据也将保留。

–胸骨
2014年6月30日下午5:42

参见pathname.com/fhs/2.2/fhs-5.15.html

–胸骨
2014年6月30日下午5:43

另请注意,现代SSD不再需要写计数。

–胸骨
2014年6月30日下午5:45

#4 楼

要列出系统中所有用户的所有cron作业:

 for user in $(cut -f1 -d: /etc/passwd)
do
  echo $user
  crontab -u $user -l
done
 


问题是将其放置在cron.d文件夹中,并为每个cron指定适当的用户,例如:

00 01 * * * user /home/user/user-script.sh


评论


如果要从另一个驱动器恢复crontab,则此操作将不起作用,因为crontab -u正在当前系统上运行。

– JVE999
2014年10月9日在21:38

虽然我认为这是一种单行代码,因为它可以容纳少于80个字符并且有点可读性,但我通常喜欢以某种格式放置代码,以便人们可以复制粘贴或将其放在脚本中(并且,在脚本中,这不是一行代码)。建议编辑中...

–Parthian Shot
15年7月18日在0:14

另外,我将把它变成一个while读取用户循环,以处理用户名包含空格的情况,但这显然不是问题。用户名字符集非常有限。

–Parthian Shot
15年7月18日在0:24