2

私はelementaryOSを使用しています(ubuntuベース)

コマンドラインを実行すると:

kn3l@kn3l:/var/www/cronjob$ 
25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log

ターミナルコマンドラインを使用してcrontabで機能します。

しかし、次のようなコードで PHP を使用すると (test.php):

-rwxrwxrwx  1 kn3l kn3l    47 Jun  6 14:59 test.php*

test.php

<?php
    $output = shell_exec('crontab -l');
    echo "<pre>$output</pre>";

私はに行きますhttp://localhost/test.php

コマンドラインのようなリターンが表示されなかったのはなぜですか?

誰でも私を助けることができますか?

4

4 に答える 4

5

ユーザーの crontab に次の行があります。

25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log

crontab では、どのバイナリがスクリプトを実行しているかを示す必要があります。hwが示すように、に置き換える必要があります

25 15 * * * <path to php> /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log

<path to php>でこれを取得しwhich phpます。

ファイルに関しては、php スクリプトを実行しているユーザーによってtest.phpコマンドが実行されていることを考慮してください。crontab -lつまり、ローカル サーバーを実行しているユーザーです。

私はテストをしました:

$ ps -ef | grep apac
.../...
www-data  1348  1332  0 09:50 ?        00:00:00 /usr/sbin/apache2 -k start

私の場合、Apacheを実行しているユーザーのwww-dataです。

あなたのファイルを に追加しました/var/www:

<?php
    $output = shell_exec('crontab -l');
    echo "<pre>$output</pre>";
?>

そして、実行中に何も表示されませんでした。なんで?www-datacrontab がないため:

$ sudo crontab -l -u www-data
no crontab for www-data

次の行を追加しました。

$ sudo crontab -l -u www-data
* * * * * touch /tmp/tt

これで、php ページに次のように表示されます。

* * * * * touch /tmp/tt

総括する

スクリプトが正しく機能していないということではなく、ユーザーの crontabwww-dataが空であるため、空のコンテンツが表示されているだけです。

于 2013-06-06T09:15:27.077 に答える
2

これを試して

<?
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
?>
于 2013-06-06T09:05:23.550 に答える
1

この方法でスクリプトを実行する必要があります。

25 15 * * * /usr/bin/php /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log

/usr/bin/phpシステムで有効であることを確認してください。

于 2013-06-06T09:02:03.513 に答える
1

test.php の最初の文字列に追加

#!/usr/bin/php
于 2013-06-06T09:14:58.830 に答える