私のサーバーはUbuntu 14.04とnginxで実行されています。私の問題はCronです。ファイル(cron.txtを使用してそれを開始します(crontab)、その内容:
_* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
_
_crontab /var/www/html/cron.txt
_コマンドを使用して実行すると、完全に機能し、スクリプトtest.phpが実行されています。しかし、PHPスクリプト(ブラウザ経由で実行))を使用して同じことを行うと、exec('crontab /var/www/html/cron.txt');
は機能しません。
コマンドによる現在のcronjobの確認:_crontab -l -u www-data
_、ファイルからの行は表示されますが、Cronはそのジョブを実行しません。多分それはいくつかの許可の問題に関連していますか?ルートとして実行することによってのみ機能するためです。 Cronにwww-dataのタスクも実行させる方法はありますか?
何を成し遂げようとしているのかよくわかりません。私が理解している限り、あなたはwww-dataユーザーとしてcronジョブを実行する必要があります。通常(強くお勧めします)www-dataユーザーはシェルにアクセスできません。ただし、cronタスクをwww-dataとして実行し、次のようにルートcronにタスクを配置できます。
* * * * * su www-data -s /bin/bash -c "/usr/bin/php /YOUR_PATH/task.php"
システムのすべてのcronジョブが1つのファイルに集中しているため、これもクリーンな方法ですが、各タスクは必要なユーザーとして(適切なアクセス許可と属性で)実行されます。
* * * *パラメータを変更して、ジョブのスケジュールを調整できます。私の例では、1分ごとに実行されます。
それが役に立てば幸い。
あなたは奇妙な何かが欲しい。 PHPスクリプトからcrontabを実行する理由Crontabは時間ベースのジョブスケジューラであり、phpスクリプトから実行しないでください。 cronjobをwww-dataとして開始する場合は、crontab -u www-data -e
コマンドで構成する必要があります。その後、構成したとおりにジョブが実行されます。
Nextcloudにも同じことが必要です。インストーラーでCronジョブをセットアップするためにPHP=)を取得できず、Linux管理者がそれを実行するように要求できないようです。
だから、あなたの最初のQ:www = data crontabジョブを設定するためにPHPをどのように使用しますか?A:必要ありません。シェルから実行する必要があります。
2番目のQ:crontabはwww-dataジョブを実行できますか? A:完全にですが、その部分はcrontabジョブのセットアップ時に行われます。 www-data
を使用してcronファイル内からcronジョブを実行することはお勧めできません。www-data
にcrontabジョブ自体を実行させるだけです。
これが私がそれを機能させた方法です:
* * * * *
php -f
/var/www/html/test.php >> /var/log/cron.log
www-data
はCronユーザーとして気難しいです。ターミナルから、次のようにCronをセットアップします。
root
...として実行中
crontab -u www-data -e
... Qと同様に、実行する文字列を追加します。
...しかし、あなたはPHPを使用してcrontabジョブを設定したいと思っています。これはPHPインストーラだと思います。)= PHPアプリがcrontabジョブをセットアップできない可能性があります。それは良い考えではないかもしれません。もし可能であれば、Nextcloud開発者に知らないようにしてください。どのように。
私は何とかやり遂げました。最初の投稿のコードはすべて問題ありません。唯一知っておくべきことは、www-dataユーザーが/var/log
への書き込みを許可されていないため、そこに出力します。さらに、私のPHPスクリプトでは、ファイルを作成してそこに何かを書き込もうとしていました。そのためには、絶対パスが必要であるため、次のようになります。
dirname(__FILE__) . '/myfile.txt';
これらの変更後、すべてが期待どおりに機能します。