web-dev-qa-db-ja.com

CRON毎週バックアップのセットアップ

/var/lib/mysqlフォルダーと/var/wwwフォルダーのバックアップを作成し、それらをtar.gzファイルとしてマウントされたネットワークファイルサーバー(uslons001)に保存します。

ここに私のbashファイルがあります:/bin/backups/mysqlbackup.sh

#!/bin/bash
mkdir /home/lv_admin/uslons001/`date +%d%m%y`
cd /home/lv_admin/uslons001/`date +%d%m%y`
tar -czf mysql.tar.gz /var/lib/mysql
tar -czf www.tar.gz /var/www

Cmdシェルで実行すると完璧に機能しますが、cronジョブを設定すると実行されないため、cronジョブを適切に設定していません。私のcronジョブは次のようになります。

   36 10 * * 5 /bin/backups/mysqlbackup.sh

../var/log/cron.logファイルにも何もないため、エラーは記録されません。 (/etc/syslog.confファイルでcronロギングを有効にした後でも

7
sadmicrowave

Bashファイルの場所を/usr/local/mysqlbackup.shに変更しました。その後、ファイルに対して次のコマンドを実行しました。

cd /usr/local/
Sudo chown [username] mysqlbackup.sh
Sudo chmod -rwx mysqlbackup.sh
Sudo chmod go= mysqlbackup.sh

それから、cronジョブを編集するコマンドとして~$ crontab -eの使用を停止し、Sudo nano /etc/crontabの使用を開始しました。そこで、次のように新しいジョブ行を作成しました。

00 20    * * 5  root  /usr/local/mysqlbackup.sh

代わりにこのファイルを使用し始めました。これは、どのユーザーに実行する必要があるかを伝えることができるためです。これらの変更後、cronジョブは機能します。

1
sadmicrowave

少数のポイント:

  • なぜ/etc/cron.weekly/スクリプトでタイムストリングを使用しているのですか?あなたはそこに実行可能なスクリプトを置くことになっています。それらをcrontabする必要はありません。それは彼らの仕事を複製するだけです。私が話していることの例については、/etc/cron.daily/aptを見てください。それは単なるスクリプトです。

  • Geirhaのコメントによると、ファイルに拡張子を付けることはできません。奇数、私は知っているので、名前を変更します:

    Sudo mv /etc/cron.weekly/mysqlbackup{.sh,}
    
  • Sudo chmod +x /etc/cron.weekly/mysqlbackupを実行して実行可能にする必要があります。その後、そのパスを使用して実行することでテストできます。

  • /etc/cron.weekly/に残すと、スクリプトはrootとして実行されます。 ~/リンクはいずれも機能しません。完全なパスを使用します。 mkdirを実行した後、cdを実行することをお勧めします。これにより、後続のコマンドの巨大なパスが削減されます。生成されたファイルをユーザーが所有する必要がある場合は、バックアップが完了したら、スクリプトをchownユーザーに作成します。

    これがルート駆動である理由はわかりません。ホームディレクトリでスクリプトを実行し、標準のcrontab -eを使用してルールを追加し、実行するだけです。まだ実行可能である必要があり、完全なパスを使用することをお勧めしますが、アクセス許可を少し簡単に保ちます。

7
Oli

曜日は数値フィールドであるため、「fri」を解析しようとして失敗しています。 5に変更します(日曜日は0)。 edit:これを修正するためにOPが更新されたことがわかりましたが、まだ問題がありますが、他の回答で対処されています。

Cron形式はオンラインで十分に文書化されているため、通常は新しいcronジョブを作成する前にドキュメントを確認します。 http://en.wikipedia.org/wiki/Cron

さらに、crontab -e(または同様の)を使用してcronファイルを編集していることを確認します。これにより、確実に再解析されます。

2
ImaginaryRobots

次のように、cron行のエラーをファイルにリダイレクトしてみることができます。

/usr/local/mysqlbackup.sh &>/var/log/mysqlcron.log

これにより、stdoutとstderrの両方がキャッチされ、構文エラーなどがある場合は報告されます。

注:のバックアップを行う場合 ライブ データベースでは、汎用のtarコマンドを使用するのではなく、mysqldumpなどの特定のユーティリティをバックアップに使用する必要があります。理由は、tarの実行中に/ var/lib/mysql /内のファイルが変更されると、データベースの一貫性のないイメージになる可能性があるためです。

0
bitwelder