crontabに次のようなエントリがあります。
0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
そのスクリプトは、シェルから実行すると完全に機能しますが、毎晩実行されているようには見えません。権限に問題があると思います。crontabが別のユーザーか何かで実行されている可能性があります。どうすればこれをデバッグできますか?私は共有ホスティング環境(WebFaction)です。
crontabに次のようなエントリがあります。
0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
そのスクリプトは、シェルから実行すると完全に機能しますが、毎晩実行されているようには見えません。権限に問題があると思います。crontabが別のユーザーか何かで実行されている可能性があります。どうすればこれをデバッグできますか?私は共有ホスティング環境(WebFaction)です。
バックスラッシュを使用してcrontabエントリの「%」文字をエスケープする必要があります。crontab(5)のマンページを参照してください。私はまったく同じ問題を抱えていました。
例えば:
0 7 * * * mysqldump usblog | bzip2 -c > usblog.$(date --utc +\%Y-\%m-\%dT\%H-\%M-\%SZ).sql.bz2
cronエラーのメールを受け取りませんか?crontabに「MAILTO=you@example.com」を入れても違いますか?
pg_dumpまたはgzipがシステムのデフォルトパス上にない場合は、crontabにPATHを設定する必要がある場合もあります(したがって、「type pg_dump」を使用してそれらがどこにあるかを確認します。crontabは通常、デフォルトで/binまたは/usr/binのコマンドのみを実行します。 )。
うまくいかないと言うとき、どういう意味ですか?ファイルがまったく生成されないのですか、それとも空ですか?
システムが正しく設定されている場合、コマンドが出力を生成すると、crontabから電子メールが送信されます。
このようなことを試して、crontabが実行されていることを確認してください。毎分ファイルにアクセスします。
* * * * * touch /tmp/foo
そして、ジェームズが述べたようにあなたの道をチェックしてください。
crontabエンティティでは常にフルパスを使用してください。たとえば、/usr/bin/gzip
。また、とのためにそれを行う必要がありpg_dump
ますdate
。
これが/etc/ crontabのようなものである場合は、ユーザーが含まれていることを確認してください。
0 3 * * * <user_goes_here> pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz