カテゴリ | |
---|---|
サマリ | PKWK_UPDATE_EXECに定義したコマンドが実行されない |
バージョン | 1.4.7_notb |
投稿者 | winはダメかね |
状態 | 完了 |
投稿日 | 2010-01-31 (日) 23:42:24 |
使用環境
1.4.7から「グローバル変数($update_exec)ではなく定数(PKWK_UPDATE_EXEC) を使用します。」とあったので、サンプルを手本にmknmzを定義したのですが、いつまで待ってもNamazuのインデックスが更新されません。 不思議に思い仕組みを追うと、lib/file.phpでUNIX固有のコーディングがされていました。
// Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) system(PKWK_UPDATE_EXEC . ' > /dev/null &');
"> /dev/null"は不当メッセージの削除とsystem()の戻り高速化、"&"はバックグラウンド実行による戻り高速化として追加しているのだと思います。
ただ、Windowsには基本的に/devディレクトリはないので、この部分がエラーになって、PKWK_UPDATE_EXECが実行されないようです。
で、お願いなのですが、/dev/nullがないようなプラットフォームでは、次のような感じでコマンドの出力を捨てるように、どこかのタイミングで変更して頂けると幸いです。
(バックグラウンド実行の共通化は難しそうなので、自分でガンバレの方向で...)
lib/file.php
// Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) { if(!strcmp(filetype('/dev/null'),'char')) system(PKWK_UPDATE_EXEC . ' > /dev/null &'); else exec(PKWK_UPDATE_EXEC); }
ちなみに、Windowsでは、"> /dev/null"は"> NUL"に置き換えるだけで良いですが、"&"に対応する機能はcmd.exeの内部コマンドのstartコマンドぐらいになります。 ただ、Namazuのmknmzがbatファイルなので、次のような小手先な修正をして、コマンドプロンプトの黒画面を出さないようにしています。 同じような現象で悩んでいる方、多少参考になれば幸いです。
x:/namazu/bin/mknmz.vbs (mknmz.batを呼び出すWindows Script Host。置き場はご自由に。PowerShellではないのは...)
Set shell = WScript.CreateObject("WScript.Shell") mknmz = "x:/namazu/bin/mknmz" output = "x:/namazu/var/namazu/index/" target = "x:/xxx/pukiwiki/wiki/" shell.Run mknmz + " --use-chasen --media-type=text/pukiwiki" _ + " -O " + output + " -L ja -K " + target, 0, FALSE
pukiwiki.ini.php (上記WSHをcscriptのバッチモードで呼び出す。)
define('PKWK_UPDATE_EXEC', 'C:/windows/system32/cscript.exe //B x:/namazu/bin/mknmz.vbs');