私はこのコマンドを使用してデータベースのテーブルをバックアップするための簡単なシェルスクリプトを作成しましたmysqldump
。このコマンドは単にデータベースをdbName.sql
ファイルにダンプします。しかし、dbName.sql
ファイルがまだ存在せず、シェルスクリプトをcrontabしても機能しません。なぜですか? crontabスクリプトはファイルの作成と書き込みを許可しませんか?
答え1
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
わかりました、私のせいです。ファイルを生成し、私に提供しました。今、すべてが正常です。
これも確認してください: