「crontab -e」と入力する代わりに、誤って「crontab」と入力してプロセスの途中で動かなくなったため、プロセスを中止しました。 crontab -eに移動すると、完全に空白になります。これは全然良くありません。取り戻せない場合は、書き直す必要があります。
次の方法はありますか?
引数なしのcrontab
は、標準入力からcrontabファイルを読み取ります。たとえば、次を使用できます。
echo "* * * * * run-this-every-minute" | crontab
Crontabを壊した後(つまり、crontab -l
は何も表示しません)、それを元に戻す良い方法はありません。
私のシステム(Ubuntu 11.04)では、個人のcrontabは/var/spool/cron/crontabs/<USER>
に格納されていますが、それはあなたが壊したものなので、何の役にも立ちません。 (パスはシステムによって異なる場合があります。)
cron
によって実行されたコマンドのエントリが/var/log/syslog
に表示されます。それ(またはシステムの同等のもの)からcrontabを再構築できる場合もありますが、面倒になります。
この種の問題を回避するために私が行うことは次のとおりです。
私はcrontabを別のファイルに保存し、ソース管理システムで管理しています。私はそれをインストールしますonlyを実行することによって
crontab filename
crontab -e
は使用しません。誤ってcrontabを壊してしまった場合は、ファイルから再読み込みするだけです。 (まあ、ほとんどありません。後で現在のバージョンを復元できることを知って、一時的な変更を行うためにcrontab -e
を使用することがあります。)
ログに基づいて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
申し訳ありませんが、明白な質問をせずにはいられません。バックアップから復元してみませんか?
えー、すみません、それはすでに提案されているようです。
EDITOR環境変数がEDITOR = viの場合は、試してください
vi -r
セッションを回復します。保存したセッションを取得した場合は、crontabディレクトリに直接書き込まないでください。これをガイドとして使用して、crontabを再作成します。
crontab -e
注:OSを指定しなかったため、Solarisおよびその他のUNIX OSは、crontab-eで作成されたものを除いてcrontabファイルへの変更を認識しません。私の記憶が正しければ、Linuxはそうです。
@KeithThompsonからのすばらしい回答-/ 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日間程度です...したがって、実行されなかった月次タスクがある場合...そのタスクはおそらくなくなっています