我应该将 crontab 文件保存在 /tmp 中吗?

我应该将 crontab 文件保存在 /tmp 中吗?

我通过 ssh 连接到服务器,并且想要向 cron 添加一些日常作业(特别是在我注销时更新 Kerberos 票证,并且我仍然希望 screen 或 tmux 中的程序继续运行)。所以我运行crontab -e,并添加以下内容,

00 00 * * * kinit -R
00 12 * * * kinit -R

保存的时候编辑问我:

File Name to Write: /tmp/crontab.HMpG7V 

不是说里面的文件/tmp可以被操作系统删除吗?尤其是在我退出服务器之后?

我应该在哪里存储我的 crontab 文件?我可以将 crontab 文件保存在 $HOME 或其他更好的空间下吗?

答案1

crontab -e在 /tmp 中打开一个文件而不是实际的 crontab,以便它可以检查新的 crontab 是否有错误并防止您用这些错误覆盖实际的 crontab。如果没有错误,那么您的实际 crontab 将被更新。如果crontab -e直接写入实际的 crontab,那么您将面临由于新 crontab 中的语法错误而导致所有 cronjobs 无法运行的风险。

sudoeditvisudovipw等的操作原理相同。

不用担心,您的实际 crontab 位于磁盘上的非易失性位置。

答案2

/tmp是写入临时 crontab 文件的位置。保存并退出后,crontab会将更改提交到系统上另一个更合适的目录(通常位于/var/spool/cron,如果我没记错的话)。所以,不用担心,操作系统可能会删除你的 /tmp,但它永远不会带走你的 crontabs。

答案3

Crontab 文件驻留在用户名或用户 ID 下的 /var/spool/cron/crontabs/ 中。由于可能会出现此处的 crontab 不再连接到您的登录帐户的情况,因此建议您将副本保存到您的主目录,例如 /home/userid/.crontab,以便您可以在需要时轻松恢复它到。如果您愿意,这还允许您将其置于修订控制之下。

如果您的主目录被重新定位到另一个系统,通常 spool 目录中的 crontab 不会随之出现,除非您的系统管理员考虑到这一点。当系统需要重做时,/var/spool 也并不总是备份或恢复。

因此,再次建议您将 crontab 的副本保存在您的主目录下。

使用您最喜欢的编辑器(pico、vi、emacs 等)编辑 ~/.crontab,然后使用 crontab 将其应用到 /var/spool/crontabs。像这样:

% pico ~/.crontab; crontab ~/.crontab

如果您喜欢别名,可以创建一个来代替运行。

相关内容