ルート crontab が実行されない

ルート crontab が実行されない

crontab、mysqldump ユーティリティ、gunzip を使用してデータベースをバックアップするように Debian サーバーを設定しています。

何らかの理由で、crontab の行、特に重要な行が失敗しているようです。

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

この動作の原因についていくつかの件を読みましたが、以下の操作を行った後でもこの crontab ジョブがファイルの作成に失敗する理由がわかりません。

  • ルート権限を使用しました:sudo crontab -eルート crontab を編集するために使用します。
  • whereis を使用して、使用しているコマンドの完全なパスを見つけ、たとえばmysqldumpを に置き換えます/usr/bin/mysqldump
  • 行全体がルートで機能することを確認しました。今日の日付でアーカイブが作成され、mysqldump の結果が入力されます (CLI でパスワードを使用しているため警告が表示されますが、crontab では問題は発生しないと思います)。

crontab でこの行を構成する方法に何か問題があると思いますが、それがわかりません。

どうやら、crontab は正常に動作しているようです。行を追加すると、* * * * * env > /backup/env.txt/backup フォルダーに env コンテンツを含むファイルが作成されます...

これについて何か手がかりを持っている人はいますか?

ありがとう !

~ステファン

答え1

cron のデフォルト パスは次のとおりです。

PATH=/usr/bin:/usr/sbin:.

ユーティリティdateはに配置されている/bin/ため、次のいずれかを実行する必要があります。

  1. このディレクトリを明示的に追加PATHするcron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

または

  1. コマンドのフルパスを指定しますdate:

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

2 番目の方法では間違いが起こりやすく、すべてのコマンドの完全なパスを指定することを忘れてしまう可能性があるため (date質問の場合など)、私は最初のオプションを好みます。

答え2

OK、私にとってうまくいかなかった点を見つけました:

を tail してみると/var/log/syslog、crontab には行サイズ制限があることがわかりました。つまり、行の読み取り時にそこで停止し、... $(date +'実行時に行が「バグ」になるのです。

私の解決策は、ジョブを /root/backup.sh スクリプトに移動し、次のコマンドを使用して crontab を編集することでした。

15 2 * * * /root/backup.sh

少なくとも、今はデータをバックアップすることができます!!

この解決策が他の人の役に立つことを願っています ;)

関連情報