web-dev-qa-db-ja.com

www-dataとしてcrontabを実行し、www-dataを所有者としてファイルを作成します

Pyスクリプトを実行するcrontabコマンドを5分ごとに実行したい。 pyスクリプトは、/ var/www/logs /内で深夜ローテーションのログファイルを生成します。logsディレクトリには777のアクセス許可があります。

ログファイルには午前0時のローテーションがあり、新しいファイルが作成されると、ルート所有者として作成されます。他のスクリプトも同じファイルに書き込むため、所有権がwww-dataのままになるようにする方法.

1つの方法は、コマンドを入力することです。

crontab -u www-data -e

これは正常に機能しますが、すべてのcronコマンドをrootユーザーで管理したいです。

私はSudoでも同じことを試みましたが、所有者としてrootで作成しますが、これは私が望むものではありません。

2
shadow0359

したい

  • ルートの下の1か所にすべてのcrontab
  • 5分ごとにpythonコードを実行します
  • ユーザーwww-dataでスクリプトを実行します

コメントで説明したように、suはwww-dataでは使用できないため、システムで使用可能な場合は、代わりにSudoを使用できます。マニュアルページから

Sudo、sudoedit —別のユーザーとしてコマンドを実行します

あなたの場合、これはあなたが使用することを意味します

Sudo crontab -e

rootユーザーとしてcrontabを編集します。 crontabの内部にSudo -u www-data pythonコマンドを追加して、python ad user www-dataを実行します。

*/5 * * * * Sudo -u www-data python /my/python/log/script.py
1
ukos

さらなる回避策ですが、スクリプトをそのままrootとして実行させ、rootによってファイルを作成することもできます。そして最後に追加するだけではありません

 && Sudo chown www-data <your Log file>

最終的にファイルの所有権をwww-dataに転送します。

(フォルダよりも多くのファイルがある場合は、フォルダ全体でchownを実行する「再帰的」の-Rフラグとそのコンテンツにも関心があるでしょう)

1
derHugo

Rootユーザーの下ですべてのcronコマンドを保守したい。

すべてのcronジョブ(さまざまなユーザーとして実行可能)を1か所で維持するには、crontabコマンドを忘れて、代わりにファイル/etc/crontabのシステム全体のcrontabを編集するか、 /etc/cron.dディレクトリにcrontabを所有します。予想どおり、ルートアクセスが必要になります。

これらのファイルは他のcrontabとよく似ていますが、ユーザー名列が含まれているため、ターゲットユーザーを指定するだけで、Sudoなどを使用する必要はありません。

コマンドcrontabとは異なり、システム構成ファイルを直接編集しているため、エディターを終了した後に変更がチェックされないことに注意してください。したがって、十分に注意して編集してください。

1
Melebius