クローンタブは削除されましたか?


11

「crontab -e」と入力する代わりに、誤って「crontab」と入力してプロセスの途中で動かなくなったため、プロセスを中止しました。crontab -eに移動すると、完全に空白になっています。これは全然良くない。元に戻せない場合は、書き直す必要があります。

次の方法はありますか?

  1. crontabジョブを元に戻しますか?彼らはどこかに記憶にありますか?Linuxのアカウント固有のcrontabファイルはどこにありますか?または
  2. cronが行ったすべてのログを取得するため、crontabファイルをリバースエンジニアリングできます。久しぶりに見た?

3
最新のシステムバックアップから復元するだけです。
David Heffernan

私のようにcrontab -rと入力してこのスレッドを見つけた場合は、/ var / logからログを読み取ってコマンドを回復できます。私の場合、syslog.1には必要なものがすべて含まれていました
StackUnder

回答:


14

crontab引数を指定しないと、標準入力からcrontabファイルが読み取られます。たとえば、次のように使用できます。

 echo "* * * * *  run-this-every-minute" | crontab

crontabを壊した(つまり、crontab -l何も表示しない)と、それを元に戻す良い方法はありません。

私のシステム(Ubuntu 11.04)では、個人のcrontabが保存されて/var/spool/cron/crontabs/<USER>いますが、それはあなたが壊したものであり、それでは何の役にも立ちません。(パスはシステムによって異なる場合があります。)

/var/log/syslogによって実行されたコマンドのエントリが表示されcronます。そこからcrontabを再構築できるかもしれませんが(もしあればシステムの同等物)、それは退屈な作業になるでしょう。

この種の問題を回避するために私が行うことは次のとおりです。

私は自分のcrontabをソース管理システムで管理されている別のファイルに保存しています。私はそれをインストールのみ実行することにより、

crontab filename

私は使用しませんcrontab -e。誤ってcrontabを上書きしてしまった場合は、ファイルから再ロードするだけです。(まあ、めったにない。私は時々crontab -e一時的な変更を行うために使用し、後で現在のバージョンを復元できることを知っている。)


@mountainclimber:同意しない。crontabを保存するには、を使用しますcrontab -l > filename。それを復元するには、crontab filename。システム提供のインターフェースを使用してください。その背後に行ってシステムファイルを操作しないでください。1つには、ファイルを更新しても、システムがファイルを再度読み取る必要があるとは限りません。crontabコマンド意志。また、ファイルの内容との出力に違いがある場合もありcrontab -lます。Ubuntuでは、ファイルには編集しないようにアドバイスする追加のコメント行があります。
キーストンプソン

他のコメントを削除します。新しいコメント:キースはパスに言及しています/var/spool/cron/crontabs/<USER>。SUSEでは、私のパスは少し異なります(余分なスラッシュに注意してください)/var/spool/cron/cron/tabs/<USER>。初心者が私のようにcronやlinuxに言及することになると思いました。キースの答えは正しいです。
mountainclimber

5

crontabを完全に回復するためのスクリプト

ログに基づいて、crontabを完全に回復するPHPスクリプトを作成しました。

先週ユーザーが実行したすべての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

1

申し訳ありませんが、明白な質問をしなくてはなりません。バックアップから復元してみませんか?

えっと、申し訳ありませんが、それはすでに提案されていました。


0

EDITOR環境変数がEDITOR = viの場合は、

vi -r

セッションを回復します。保存したセッションを取得した場合は、直接crontabディレクトリに書き込まないでください。これをガイドとして使用して、crontabを再作成します。

crontab -e

注:OSを指定しなかったため、Solarisおよび他のUNIX OSは、crontab -eで作成されたものを除いて、crontabファイルへの変更を認識しません。私が正しく覚えていれば、Linuxはそうです。


回復するセッションはありません。OP crontabcrontab -e。crontabを維持するためのより良い(IMHO)方法については、私の回答を参照してください。
Keith Thompson

0

@Keith Thompsonからの素晴らしい回答-/ var / log / syslogから再構築する良いアイデア!

また、誤ってユーザーのcrontabを破壊しましたが、次のscript-fuを使用して再構築できました。

mkdir ~/syslog
sudo cp /var/log/syslog* ~/syslog/
sudo chmod 777 ~/syslog/*
cat ~/syslog/* | grep "(username)" | grep -o "CMD.*" | sort | uniq

ここで、usernameは、再構築するcrontabを持つユーザーに置き換える必要があります。

ログが圧縮されている場合、最初に/var/log/syslog.x.gzファイルの内容をgunzipする必要があることに注意してください(ubuntuはsyslog.2 +を圧縮します)。

これはまた、ログに残っているコマンドだけを取得します。これは、過去7日間ほどです...したがって、実行されなかった月次タスクがある場合...そのタスクはおそらくなくなっています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.