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/
ため、次のいずれかを実行する必要があります。
このディレクトリを明示的に追加
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
または
コマンドのフルパスを指定します
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
少なくとも、今はデータをバックアップすることができます!!
この解決策が他の人の役に立つことを願っています ;)