Go言語で daemon を作ってみる その3
▼ Daemon のプログラム

Daemon として動くプログラムには、
ふつーのプログラムには必須でない機能が必須になります。それは...

・シグナルの取扱い
・タスクスケジューリング


です。どっちもなんか小難しい感じがしますが「シグナルの取扱い」に関しては
定型処理と言って差し支えないでしょう。

よって、サンプルソースそのまんまの実装で問題ないと思います。
何をやっているかは、ソースのコメントを参照すると良いでしょう。

go言語 daemon サンプルソースコード

「タスクスケジューリング」に関しては色々と戦略があるのですが
ここでは一番安直な「一定時間休む」パターンを例に取っています。

サンプルでは 10秒に1回の処理を行うのに、
休む間隔を 10秒ではなく 100ミリ秒にしているのは、
SIGTERM を受け取った際に、プロセスが止まるまで0.1秒にするためです。

また、time.Sleep() を削除すると、無駄に CPU のコアを丸々一つ使い切りますw
意図もなく time.Sleep() の値を 10ミリ秒以下にするのはお勧めしません。
一方で、このサンプルでは「最繁時は休む時間を少なくしたい」とゆー
daemon に求められる割と基本的な要件は満たしていません。

このように、タスクスケジューリングにはちょっとコツが必要なのですが
これ以上は go言語とはあまり関係無い話になってくるので割愛します。

処理間隔が1分に1回でよければ、大人しく cron 使えと言ったところでしょうか。

【2017/05/31】 golang / Revel | トラックバック(0) | コメント(0) | page top↑
<<今月の密林 2017/6 | ホーム | Go言語で daemon を作ってみる その2>>
コメント
コメントの投稿











管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://hidenov.blog4.fc2.com/tb.php/1368-86ca6483
| ホーム |