Crotabbedシェルスクリプトはファイルを作成/書き込みできません。

Crotabbedシェルスクリプトはファイルを作成/書き込みできません。

私はこのコマンドを使用してデータベースのテーブルをバックアップするための簡単なシェルスクリプトを作成しました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

わかりました、私のせいです。ファイルを生成し、私に提供しました。今、すべてが正常です。


これも確認してください:

関連情報