ESXi ゲストOSの複製 cron
10月 15

PHPをcron(コマンドライン)で実行

やり方は2パターンあります。

1]phpスクリプトの行頭にphpプログラムのファイルパスを記述する

#!/usr/bin/php -q
(-q :: Quiet-mode. Suppress HTTP Header output.)

2]phpプログラムにphpスクリプトを引数として渡して実行する

usr/bin/php test.php

PATHが通っていれば

php test.php

ここでは私がいつも行うやり方を備忘録として…

準備

/usr/local/bin/phpだとパスが長いのでちょっとでも短くしたいので

/usr/bin/phpにシンボリックリンクします

まずはリンク先にphpがあるかどうかの確認

</p>

<p style="padding-left: 30px;">su -
cd /usr/bin
find php
find: php: そのようなファイルやディレクトリはありません
<p style="padding-left: 30px;">

※もし既に/usr/bin/phpが存在する場合はrpmなどで
インストール済みの物なのでリネームor削除する

ソースコンパイルでインストールしたPHPで

シンボリックリンクを張る


su -

ln -s /usr/local/bin/php /usr/bin/php

テスト用のtest.phpを作成


#!/usr/bin/php -q
&lt;?php
echo "Hello Test";
?&gt;

実行権限を付与


chmod 700 test.php

#実行してみる
./test.php

→”Hello Test” と表示されればOK!
これをスケジューリングしたい場合には

Cronに登録

(例: 毎日8:00に起動)


crontab -e

00 08 * * * /home/sv01/bash/test.php

引数の受け渡し

PHPをコマンドラインで実行すると、コマンドラインで与えた引数の情報が
$argc、$argvという変数に格納されます。

$argc : 引数の数
$argv : 引数が格納された配列

普通、最低でも引数としてファイル名が指定されているので、

$argc : 1
$argv[0] : ファイル名(パス)

となるはずです。

例えば、
(test.php)

#!/usr/bin/php -q
&lt;?php
for ($i = 0; $i &lt; $argc; $i++) {
echo $i, " : ", $argv[$i], "\n";
}
?&gt;

Comments are closed.

preload preload preload