用户crontab存储在哪里?


249

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

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


4
如果有人也可以提供一个理由,为什么它会被删除掉,它会很好
Walter Tross 2012年

1
@WalterTross是的,这很烦人。我想这是更新cron软件包的副作用,但我同意-这不是应该发生的事情。
奥利(Oli)

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

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

用户表存储在/ var / spool / cron / crontabs / $ USER临时区域中,因此在下次启动或升级时可能会删除它们。
fcm

Answers:


325

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

每个用户都可以拥有自己的crontab,尽管
这些文件是中的文件/var/spool/cron/crontabs,但不能
直接对其进行编辑。

下面的文件/var/spool被认为是临时文件/正在工作,这就是为什么它们可能在升级过程中被删除的原因,尽管仔细查看cron软件包的升级脚本可能会对此有所了解。

无论如何,备份cron条目或将其保存在主目录中的文件中始终是一个好习惯。

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

crontab -l > my-crontab

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

crontab my-crontab

语法与相同crontab -e


7
crontab -l比执行此操作容易,/var/spool/cron/crontabs/$USER主要是因为对该文件具有奇异的权限。
奥利(Oli)

1
iptables-save的cron。尼斯...
Parthian Shot

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

4
/var/spool/cron/crontabs当您要管理或检查来自多个用户的crontab时,快速浏览很方便。
dhasenan '16

1
当一台服务器上调查的奥秘,你不熟悉的,是很常见的sudo grep -rHin "$string" /etc/cron*(其中字符串可能会像一个命令dockerlftpiptables,等,这是检查用户的crontab也是一个好主意,那是什么导致我这个Q&A。sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
布鲁诺Bronosky


30

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

我已/var/spool安装为tmpfsRAM驱动器。

听起来很蠢,但是我遵循了一项旧的SSD调整措施,以延长SSD的使用寿命。这样做,我盲目地安装/tmp/var/tmp/var/spooltmpfs没有反响的思考。我觉得/var/spool/proc/或者/run/,它只是在会议期间非常有用。我显然错了。


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


2
还请注意,现代SSD不再需要写计数。
thomasrutter 2014年

17

要列出系统中所有用户的所有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年

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

另外,我将把它变成一个while read user循环,以处理用户名包含空格的情况,但这显然不是问题。用户名字符集非常有限。
Parthian Shot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.