www-data として cronjob を実行する

www-data として cronjob を実行する

私のサーバーはUbuntuとnginxで動いています。私の問題はクロン、ファイルを使用して(crontab)を起動したいと思います -クローン.txt、その内容:

* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log

コマンドを使用して実行するとcrontab /var/www/html/cron.txt、スクリプトは完璧に動作しますテストが実行されています。しかし、PHP スクリプト (ブラウザ経由で実行) を使用して同じことを実行するとexec('crontab /var/www/html/cron.txt');、動作しません。

コマンドで現在の cronjob を確認すると、crontab -l -u www-dataファイルの行が表示されますが、Cron は機能しません。これは、何らかの権限の問題に関連している可能性があります。これは、root として実行することによってのみ機能するためです。Cron に www-data のタスクも実行させるように強制する方法はありますか?

答え1

を使用してください/etc/crontab。cron ジョブを実行するこの方法では、タスクにユーザー名を追加できます。次のようになります。

* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log

nano /etc/crontabファイルに行を追加することができます。

しかし、PHP スクリプト (ブラウザー経由で実行) を使用して同じことを実行すると、exec('crontab /var/www/html/cron.txt'); は機能しません。

それでもうまくいかない場合は、おそらく「crontab」の使用以外の問題があると考えられます。たとえば、リダイレクトする必要はありませんか? (つまり、> /dev/null 2>/dev/null &exec コマンドの最後に使用しますか?)。

答え2

望みどおりの結果を得ることができました。最初の投稿のコードはすべて問題ありません。唯一知っておくべきだったのは、www-data ユーザーは に書き込むことが許可されていない/var/logため、出力がなかったことです。さらに、PHP スクリプトでファイルを作成してそこに何かを書き込もうとしましたが、絶対パスが必要なので、次のようになります。

dirname(__FILE__) . '/myfile.txt';

これらの変更後、すべてが期待どおりに動作するようになります。

関連情報