mysqldump
コマンドを使用してDBのテーブルをバックアップする簡単なシェルスクリプトを作成しました。このコマンドは、DBをdbName.sql
ファイルにダンプするだけです。ただし、dbName.sql
ファイルがまだ存在せず、このシェルスクリプトをcrontabすると、機能しません。その理由は何でしょうか? crontabスクリプトは、ファイルの作成とファイルへの書き込みを許可されていませんか?
Cronジョブは、rootまたは別の指定されたユーザーとして実行できます。そのユーザーに.sql
ファイルへの書き込み権限がない場合、ジョブは失敗します。
ファイルが存在し、ジョブを実行するユーザーに対して書き込み権限がある場合、ファイルが書き込まれます。
ファイルが存在せず、ユーザーにターゲットディレクトリにファイルを作成する権限がない場合、ジョブは失敗します。
私は通常言うことができます
Sudo touch /var/log/foo.log
Sudo chown my_username /var/log/foo.log
今私は言うことができます:
echo bar > /var/log/foo.log
しかし、ファイルが存在しない場合、/var/log/
にファイルを作成する権限がないため、ファイルは失敗します。
したがって、ジョブを実行しているユーザーがmysqldump
からの出力が書き込まれる場所にファイルを作成する権利を持っているかどうかが問題になります。
これでスクリプトを実行するようにcronジョブを設定した場合:
date > /var/log/foo.log
毎分、追加できます:
* * * * * my-user-name /path/to/script
/etc/crontab
へ。/var/log /にファイルを作成する権限がないので、ジョブが失敗すると、cronデーモンからメールが送信されます。
1分後、ファイルはありません。ターミナルに行き、mail
と入力します:
$ mail
>N 1 Cron Daemon Sat Jan 31 05:15 19/731 Cron <user@Host> /path/to/script
? type
...
/path/to/script: line 3: /var/log/foo.log: Permission denied
OK。私の悪い。私はファイルを作成し、それを私に見せます。今はすべて大丈夫です。
これらも見てください: