sixcoreのcronでphpを実行する

root権限がもらえずsshも使えないレンタルサーバで一体何にcronを使用するのか以前から不思議だったが、使う機会があった。詰まったのでそのときのメモ。

phpが叩けない

一定時間毎にphpスクリプトをcronで実行しようとしたところ、動作しなかった。
動作しないというのは、phpコマンドの後に>でリダイレクトしてもブランクファイルが出力され、sixcoreのcron通知機能(結果をメール送信)もメールが送信されないという状況。
そしてsixcoreのcronに関するマニュアルは物凄く簡素で情報が少ない。

今回書いたcron設定はこれ。

* * * * * php /home/<アカウント名>/advpro.co.jp/public_html/hoge/test.php

※どのユーザで実行されているかは不明な為省略

ちなみに実際のphpスクリプトでは、一定時間毎にIMAPでメールを取得し、内容をDBに蓄積するというようなことをしようとしていた。

wgetかcurlを使うと動く

phpが何らかの原因により実行できないことが確認できたので、次に試したのはwgetとcron。apacheを介してphpは実行できるので、任意のパスにphpを設置し、次のようなcronを書けば良い。

* * * * * wget http://advpro.co.jp/hoge/test.php

または、

* * * * * curl http://advpro.co.jp/hoge/test.php

出力が必要なときはリダイレクトする(要らなくても多分>/dev/nullしたほうがいい)。
あとは外部から実行されないように、.htaccessで制御しておけばとりあえず要件は満たせる。

実はコマンドが違った

調べたところ、「php53」としておけば普通に動く事がわかった。
cronで ls -la /usr/bin した結果、

-rwxr-xr-x  1 root root    2866944 Mar 24  2014 php
-rwxr-xr-x  1 root root    2878552 Mar 24  2014 php-cgi
-rwxr-xr-x  1 root root       1123 Mar 24  2014 php-config
lrwxrwxrwx  1 root root         27 Aug 28  2013 php5.2 -> /usr/bin/org/php5.2/php-cgi
lrwxrwxrwx  1 root root         26 Aug 28  2013 php5.3 -> /usr/bin/org/php53/php-cgi
lrwxrwxrwx  1 root root         27 Mar 28  2014 php5.4 -> /opt/php-5.4.26/bin/php-cgi
lrwxrwxrwx  1 root root         27 Mar 28  2014 php5.5 -> /opt/php-5.5.10/bin/php-cgi
lrwxrwxrwx  1 root root         26 Aug 28  2013 php53 -> /usr/bin/org/php53/php-cgi

となっていたので、必要なバージョンのリンクを叩けば良い。
今回の例では、

* * * * * php53 /home/<アカウント名>/advpro.co.jp/public_html/hoge/test.php

上記のように変更したところ動作した。
sshログインできないんだからこれくらいはマニュアルに書いて欲しい。

その他

cron設定について色々いじっていたところ、時刻指定は通常のcronと同様に設定できることがわかった。「*」は当然使えるし、「*/n」も使える。恐らく入力値をそのままファイルに追記しているんだろうと思う。
ちなみに、sixcoreのcron設定では分に「*」を指定すると、負荷掛けたら利用制限するという旨のメッセージが表示されるが、「*/1」としておけば表示されない。どっちにしても負荷掛けたら怒られるだろうけど。

CUIでCPUベンチ

自宅で趣味に使用していたサーバが壊れたので、Celeron G1820で一台組みました。せっかくなのでπ焼きをしようとしたら、次のようなメッセージが表示され起動できませんでした・・・。

$ ./super_pi
./super_pi: line 1: 11961 Segmentation fault (core dumped) ./pi $1

解決しそうになかったので、代替案を調べました。
timeでpiの処理時間を取るのが良さそうです。piはaptで入ります。

$ sudo apt-get install pi
$ time pi 1048576 >/dev/null

real    0m3.576s
user    0m3.528s
sys     0m0.044s

5,000円でこれなら良いんじゃないでしょうか。
(比較対象がないので正直よくわかりませんが・・・)

ちなみに社内で開発に使用しているサーバ(E2160)はこんな感じでした。

real    0m4.029s
user    0m3.960s
sys     0m0.046s

もうちょっと速いのが欲しいですね・・・。

過去ネタ1

こんにちは。こんばんは。おはようございます。
Q-39です。お世話になっております。

ブログが新しくなりました。
で、過去のブログはどこかにあるかと言うとどこにもないので※1、同じ内容でもOKという事で、使えそうで使えないテクニックを書こうと思います。

MS-DOSのバッチファイルなんてまだ使われているのか不明ですけど、バッチファイル内で数秒待つ必要がある場合の待ち処理の書き方です。
例えば5秒待ちたいときは、

ping -n 6 localhost > nul

って書きます。5秒なのに6って書くのは、1回目は待たないからです。
今回はこれにて終りとさせていただきます。

※1googleのキャッシュにはあるかも

【WordPress】プラグインを追加する(SyntaxHighlighter)

当ブログにSyntaxHighlighterというプラグインを導入したので、ついでに導入方法の解説をします。
SyntaxHighlighterは、その名の通りプログラムの特定の語句をハイライトして見やすくしてくれます。(有名なので説明するまでもないと思いますが・・・。)

1.ダウンロード
プラグイン(zipファイル)を下記URLからダウンロードします。
http://wordpress.org/plugins/syntaxhighlighter/

2.解凍
ダウンロードしたzipファイルを解凍します。
01

3.アップロード
解凍したファイルをディレクトリごとアップロードします。
アップロード先:./wp-content/plugins
02

4.有効化
Wordpress管理画面のプラグインのページで、SyntaxHighlighterの「有効化」リンクを押下します。
03

5.使用方法
プログラムとして表示したい部分を、[[php]~[/php]]の様に言語名で囲みます。
次の様に表示されます。

<?php
if(!empty($hoge)){
	echo 'hoge';
}else{
	echo 'hogehoge';
}
?>

大抵のプラグインは同様の方法で導入できるので試してみてください。