2017-03-01 11 views
0

私は最終目標が毎月の最初の日曜日にデータベースのバックアップを作成することです(そして前の月のバックアップをプロセスで削除します)。私は日曜日でない日には最初の週の間に作られたこれらのバックアップの複数を参照してくださいよ、私に/ tmp /フォルダ内に見て、しかし私のcronジョブは、日曜日にのみ実行する必要がありますが、他の日にも実行されていますか?

0 1 1-7 * * test `date +\%w` -eq 0 && rm /tmp/firstSundayBackup*; mysqldump -u user -ppassword database > /tmp/firstSundayBackup-`date +\%Y-\%m-\%d`.sql 

:ここ

は、私はそれのように定義したものです。

test `date +\%w` -eq 0 && REST_OF_JOB 

は日曜日ではありません任意の日に実行されているからコードを止めるべきではないでしょうか。

答えて

1

test `date +\%w` -eq 0 && REST_OF_JOB 

は日曜日ではありません任意の日に実行されているからコードを止めるべきではないでしょうか。

これはありますが、オペレータの優先順位により、これはrmコマンドにのみ適用されます。 mysqldumpは関係なく処理を進めます。

あなたは、単に&&後、二つのコマンドの周りに括弧を置くことによってこの問題を解決することができます

脇の主要として
test `date +\%w` -eq 0 && (rm /tmp/firstSundayBackup*; mysqldump -u user -ppassword database > /tmp/firstSundayBackup-`date +\%Y-\%m-\%d`.sql) 

:あなたが実行するcronのを指示しましたので、あなたの仕事は、毎日実行されますそれは毎日です。あなたがこれをやっていて、Cronに日曜日にそれを実行するように伝えるのではなく、それらの実行のほとんどを短絡しようとする理由がありますか?

0 1 1-7 * 0 
0

私はそれをcronのの実装でedge caseに頼ることにより、日付のテストせずにこれを実現することが可能だと思う:それはあなたのようにそれをスケジュールした場合、これをアプローチする最も直感的な方法のように思えるので、何が間違って行くだろう。試してみてください0 1 1-7 * */7REST_OF_JOB

関連する問題