2016-10-31 7 views
0

データベースバックアップをとるために使用される(/home/username/public_html/backup_dir/db_backup.shに保存されている)シェルスクリプトがあります。cronバックアップzipファイルのパスを設定する方法

私は私のでシェルスクリプトを実行しているディレクトリ/home/username/public_html/backup_dir/に行くと、それはbackup_dirディレクトリ(良い)でzipファイルを作成しているコマンドsh db_backup.shてスクリプトを実行して、パテを通じてを共有ホスティング。しかし、同じスクリプトで、ルート(つまり、/)ディレクトリにあるzipファイルを作成しています。(問題)です。

私は、シェルスクリプトがどこにある/home/username/public_html/backup_dir/にzipファイルを作成します。

私は店舗のパスをいくつか設定する必要があることは知っていますが、どこに書き込むのかわかりません。

シェルスクリプト(db_backup.sh)

#!/bin/sh 
FILE=my_db.sql.`date +"%Y%m%d"` 
DATABASE=db_name 
USER=db_username 
PASS=db_password 
unalias rm  2> /dev/null 
rm ${FILE}  2> /dev/null 
rm ${FILE}.gz 2> /dev/null 
mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE} 
gzip $FILE 
echo "${FILE}.gz was created:" 

crontabコマンド

0 */6 * * * sh /home/username/public_html/backup_dir/db_backup.sh 

すべてのヘルプ/提案が割り当てるのに役立ちます。

ありがとうございました。

+0

通常、非対話型スクリプトではエイリアス展開が行われないので、 'unalias'は基本的にno-opです。 – tripleee

+0

また、 'rm'は任意の数のファイル名を取るので、' rm -f "$ FILE" $ FILE.gz "'を実行することができます。 '-f'は基本的に"ファイルが見つかりません "という警告を副作用として無効にするので、エラーリダイレクトは必要ありません。 – tripleee

+0

@トライプルー:実際には、私はシェルスクリプトを知らないです。ですから、 'unalias'で始まる3行を' rm -f "に置き換えるべきですか?$ FILE" "$ FILE.gz" '?? '2/dev/null'と書かなければなりませんか? –

答えて

1

これを試してください。

#!/bin/sh 
FILE=/home/username/public_html/backup_dir/my_db.sql.$(date +"%Y%m%d") 
DATABASE=db_name 
USER=db_username 
PASS=db_password 
unalias rm  2> /dev/null 
rm ${FILE}  2> /dev/null 
rm ${FILE}.gz 2> /dev/null 
mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE} 
gzip $FILE 
echo "${FILE}.gz was created:" 
+0

@Mustafa DOGRUに感謝していますが、生成されたファイルは違い、またgzipは動作しません。つまり、生成されたSQLファイルは圧縮されていません。新しく生成されるファイル名は** my_db_file.sql.Mon Oct 31 16:58:01 GMT 2016 **です。私が望むのは** my_db_file.sql.20161031.gz **です。 –

+0

と、あなたが言ったようにファイル名を変更した後にもう1つの問題があります。cronを実行するたびに新しいファイルが作成され、既存のファイルと同じ日付に置き換えられます。 @RaunakGupta; –

+0

;スクリプト内で日付 "%Y%m%d"を使用していますか?ファイルの出力はタイムスタンプです。しかし、このスクリプトは20161031のような日付しか生成しません。結果の日付+ "%Y%m%d"は端末に出力されます。私はansを更新しました。多分これがあなたを助けるかもしれません。これを修正すると、gzipコマンドも正しく動作します。 –

3

Cronは、呼び出し元のユーザーのホームディレクトリ内のすべてのジョブを実行します。どうやら、これはrootのcrontabから実行しています。

適切な修正は、スクリプトにディレクトリパスを追加することはおそらくです:

FILE=/home/username/public_html/backup_dir/my_db.sql.$(date +%Y%m%d) 

または明示的に理想的な実行中のスクリプト

FILE=$(dirname "$0")/my_db.sql.$(date +%Y%m%d) 

未満のパス名を使用したい場合は、お使いの実際の作業を行う前にこのスクリプトに明示的にcdという名前を付けることができますが、私はこれをお勧めします。

  • スクリプトはcdに失敗する可能性がありますが、まだ続行しています(もちろん、すべての失敗を致命的にするためにset -eを追加することもできますが、おそらく他の場所でコードを変更する必要があります)。
  • ファイルが同じ場所に常に作成されることを意図している場合、これは訓練されていない目にも明らかにする必要があります。
+0

こんにちは、あなたが答えた@トライプルは働いていましたが、ファイル名の接尾辞がないので、私はあなたの答えを受け入れませんでした。そのような詳細な答えをいただきありがとうございます。 –

関連する問題