操作
Bug(バグ) #3925
完了タスクが異常終了した場合の終了コードが適切でない
開始日:
2017-03-09
期日:
進捗率:
100%
予定工数:
(合計: 0:00時間)
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)
説明
Overview (現象)¶
opPlugin:install など一部のタスクは異常終了した場合でも終了コードが 0 を返しており、スクリプト等で異常終了を検知することができない。
プロセスの終了コードは慣例に従い、正常終了では 0 を、異常終了では 0 以外(通常は 1 )を返すべきである。
(sh などの if コマンドの構文でも、終了コードが 0 の場合に then 以降のコマンドを実行すると定義している)
$ /usr/bin/php ./symfony opPlugin:install opMessagePlugin >> plugin installing plugin "opMessagePlugin" >> sfPearFrontendPlugin downloading opMessagePlugin-1.0.0.tgz ... >> sfPearFrontendPlugin Starting to download opMessagePlugin-1.0.0.tgz (34,163 bytes) >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin ...done: 34,163 bytes >> sfPearFrontendPlugin could not extract the package.xml file from >> sfPearFrontendPlugin "/home/upsilon/git/openpne3/v3.6/cache/.pear/opMessagePlugin-1.0.0.tgz" >> sfPearFrontendPlugin Download of "http://get.openpne.jp/opMessagePlugin-1.0.0.tgz" >> sfPearFrontendPlugin succeeded, but it is not a valid package archive >> sfPearFrontendPlugin Invalid or missing remote package file Plugin "opMessagePlugin" installation failed: $ echo $? 0
ここで表示されているエラーは #3918 のもので、当チケットの問題とは関係ない。
Causes (原因)¶
opPluginInstallTask::execute()
メソッドでは異常終了時に return false;
する実装となっている。
} catch (sfPluginException $e) { $this->logBlock($e->getMessage(), 'ERROR'); // ...snip... return false; }
sfTask::execute()
の戻り値は boolean 型ではなく integer 型を返すことが想定されており、上記のように boolean 型の値を返してしまうと PHP の 型変換の規則 に従って false
は 0
に変換されてしまう。
これが原因で、タスクの異常終了時に終了コードが 0 になっていた。
Way to fix (修正内容)¶
sfTask::execute()
を実装するクラスで return false;
を記述している箇所を return 1;
に置き換える。
操作