# 自定義程序 [hyperf/process](https://github.com/hyperf/process) 可以新增一個使用者自定義的工作程序,此函式通常用於建立一個特殊的工作程序,用於監控、上報或者其他特殊的任務。在 Server 啟動時會自動建立程序,並執行指定的子程序函式,程序意外退出時,Server 會重新拉起程序。 ## 建立一個自定義程序 在任意位置實現一個繼承 `Hyperf\Process\AbstractProcess` 的子類,並實現介面方法 `handle(): void`,方法內實現您的邏輯程式碼,我們透過程式碼來舉例: ```php 使用 `#[Process]` 註解時需 `use Hyperf\Process\Annotation\Process;` 名稱空間; ## 為程序啟動加上條件 有些時候,並不是所有時候都應該啟動一個自定義程序,一個自定義程序的啟動與否可能會根據某些配置或者某些條件來決定,我們可以透過在自定義程序類內重寫 `isEnable(): bool` 方法來實現,預設返回 `true`,即會跟隨服務一同啟動,如方法返回 `false`,則服務啟動時不會啟動該自定義程序。 ```php container->get(StdoutLoggerInterface::class); while (true) { $redis = $this->container->get(\Redis::class); $count = $redis->llen('queue:failed'); if ($count > 0) { $logger->warning('The num of failed queue is ' . $count); } sleep(1); } } } ``` 如果使用了非同步 IO,沒辦法將邏輯寫到迴圈裡時,可以嘗試以下寫法 ```php