crontabをuser:www-dataとして実行する方法は?


32

私のLAMPは動作するように設定されてuser:www-dataおり、すべてのファイルとフォルダーはその許可で作成されます。

crontabをuser @ ubuntuとしてセットアップしました。

だから私はcrontab -eこのコマンドを実行します:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

基本的に、このコマンドは指定された場所にキャッシュファイルを作成します(問題はありません)が、そのキャッシュファイルは権限ではなくuser:user権限で作成されますuser:www-data

デフォルトでuser:www-data許可付きのファイルを作成するようにするにはどうすればよいですか?
行けず、chownファイルが再作成されるたびに。

ありがとう。


www-dataとして実行されるcrontabスクリプト(for awstatsphp5sessioncleanなど)は/etc/cron.*ディレクトリにあるため、crontab -e(ユーザーwww-dataを指定する場合でも)表示されないことに注意してください。
スキッピールグラングロウ

回答:


40

エントリをシステムcrontab /etc/crontabに書き込むことができます。これは、実行するユーザーを指定する追加の引数を取ります(通常はルートですが、www-dataにすることができます)。

あなたの行は次のようになります:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

または、次のコマンドでユーザーwww-dataのcrontabを編集できますsu

sudo su -c "crontab -e" www-data

1
実際、2番目のオプションはUbuntuのほとんどのバージョンでは機能しません
-user123

2番目のオプションは12.04LTSで機能します。後のバージョンではないのでしょうか?
mivk

1
2番目のオプションが14.04で機能しない
-dgoosens

管理を容易にするため、ラインもに独自のファイルに入れることができる/etc/cron.d、わかりやすい名前を持つ例えば/etc/cron.d/artisan
fkraiem

2
2番目のオプションでは、代わりにこれを試してくださいsudo su -c "crontab -e" www-data -s /bin/bash
Lunfel

51

-u引数を指定してcrontabを実行し、特定のユーザーのcrontabを編集することもできます。

sudo crontab -u www-data -e

これは14.04で動作します
dgoosens

3

ユーザーwww-dataとしてcrontabを実行するには、次のコマンドを使用できます。

crontab -u www-data -e

次に、たとえば15分ごとにphpファイルを実行する行を記述します。

*/15  *  *  *  * php -f /path_to_cron/cron.php

保存すると、エディターから次のように求められます。

File Name to Write: /tmp/crontab.HMpG7V 

そこに保存してください、心配ありません。crontab -e実際のcrontabではなく/ tmpにファイルを開き、新しいcrontabでエラーをチェックして、実際のcrontabがこれらのエラーで上書きされないようにします。エラーがなければ、実際のcrontabが更新されます。crontab -eが実際のcrontabに直接書き込んだ場合、crontab全体が吹き飛ばされる危険があります。

cronjobが実行されていることを確認するには、cronログを確認できます。通常、/ var / log / cron.logで、または次のコマンドを実行します。

crontab -u www-data -l

Ubuntuの上で私のために働いたこの1
tristanbailey

これは、4年前にコード司令官によって以前より正確かつ正確に回答されていました。「sudo」の使用を省略しました。cron行の形式に関する要求されていない情報を投入しました。
HörmannHH

@RichieHH、なぜsudoを追加する必要があるのですか?ユーザーがまだルートとして実行されていないというのは誰ですか?このコマンドを使用する人は、特権を使用してコマンドを実行する必要がある場合はsudoを使用して実行する必要があることを知っているだけの十分な知識が必要です。コード司令官はコマンドを入力したが、それ以上の情報は提供しなかった
spacebiker

..賢い人は、他の人の仕事を批判するよりも、答えを出す方が良いでしょう。そうすれば、あなたは評判を得始めます
spacebiker

-1

別のアプローチを追加したいと思います。他の人が述べたように、Ubuntu(ここでは16.04)とwww-data crontabは信頼できないようです(おそらくセキュリティ上の問題でしょうか?)。

とにかく、私たちの会社では、サーバー上のすべてのcronジョブを簡単にアクセスできるようにするので、何も見逃すことはありません。同時に、すべて(本当に何でも)をルートとして実行したくありません。

だから走る

sudo crontab -e 

通常どおり、コマンドを次のように指定します

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

ルートcronjobsファイルにcronjobを保持しながら、/ path / to / commandをwww-dataとして実行します(これは常に正しく実行されます)。パイプを使用して、ログファイルをルートとして(最大限のセキュリティのために)書き込むことができるという素晴らしい利点があります。

好みのシェルを渡していることに注意してください。これは、より単純なシェルの場合は/ bin / shにすることもできます(完全なbash機能が好きです)。Www-dataにはシェルが指定されていないため、それなしではエラーが発生します。通常、cronは/ bin / shのみでジョブを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.