web-dev-qa-db-ja.com

Crontabbed Shellスクリプトがファイルを作成/ファイルに書き込めない

mysqldumpコマンドを使用してDBのテーブルをバックアップする簡単なシェルスクリプトを作成しました。このコマンドは、DBをdbName.sqlファイルにダンプするだけです。ただし、dbName.sqlファイルがまだ存在せず、このシェルスクリプトをcrontabすると、機能しません。その理由は何でしょうか? crontabスクリプトは、ファイルの作成とファイルへの書き込みを許可されていませんか?

5
Nikster2014

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。私の悪い。私はファイルを作成し、それを私に見せます。今はすべて大丈夫です。


これらも見てください:

2
Runium