crontab 删除了?

use*_*832 11 unix cron

我没有输入“crontab -e”,而是不小心输入了“crontab”并被卡在了一个进程的中间,所以我中止了这个进程。现在当我去 crontab -e 时,它​​完全是空白的。这一点都不好。如果我无法取回它,我将需要重写它。

有没有什么办法:

  1. 找回我的 crontab 工作?他们在某个地方的记忆中吗?linux 中特定于帐户的 crontab 文件在哪里?或者
  2. 获取 cron 所做的所有事情的日志,以便我可以对我的 crontab 文件进行逆向工程。我好久没看了吗?

Kei*_*son 14

crontab不带参数从标准输入读取 crontab 文件。例如,您可以使用:

 echo "* * * * *  run-this-every-minute" | crontab
Run Code Online (Sandbox Code Playgroud)

一旦你破坏了你的 crontab(即crontab -l什么都不显示),就没有什么好方法可以把它找回来。

在我的系统 (Ubuntu 11.04) 上,个人 crontab 存储在/var/spool/cron/crontabs/<USER>- 但这就是你破坏的东西,所以这对你没有任何好处。(路径在您的系统上可能不同。)

我看到了/var/log/syslogcron;执行的命令的条目 您也许可以从中重建您的 crontab(或您的系统的等效项,如果有的话),但这会很乏味。

这是我为避免此类问题所做的工作:

我将 crontab 保存在一个单独的文件中,并在源代码控制系统中维护。我通过运行安装它

crontab filename
Run Code Online (Sandbox Code Playgroud)

我从不使用crontab -e. 如果我不小心破坏了我的 crontab,我可以从文件中重新加载它。(嗯,几乎从来没有;我有时会crontab -e进行临时更改,因为我知道以后可以恢复当前版本。)


小智 5

用于完整 crontab 恢复的脚本

我制作了一个 PHP 脚本,可以根据日志完全恢复您的 crontab。

它输出用户在上周运行的每个 cron 命令的单个实例。

我把它放在这里

https://github.com/dangreenisrael/recover_crontab

这是一个示例输出:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh
Run Code Online (Sandbox Code Playgroud)