Go言語で daemon を作ってみる その2
▼ daemon 起動設定(CentOS 6)

まずは起動スクリプト。

起動用スクリプト

これを /etc/init.d 配下にコピーして、権限 755 root:root を与えておきます。
go言語以外を対象としたものならどこにでもおいてありますが
それとほぼ同一のものです。

唯一異なるのは、この後に出てくる
「daemon プロセスを起動するためのgo言語のプログラム」が
daemon プロセスとして起動した子プロセスの PID を、標準出力に出力するところ
です。
戻り値として 子プロセスの PID を戻す場合は、少し変更が必要です。

あとはこれを chkconfig --add で daemon としてやればOKです。

▼ daemon プロセス起動用の go言語のプログラム(CentOS 6)

daemon 起動設定(CentOS 6)で起動できるのは
init を親プロセスとして、root権限 の daemon 起動用のプロセスです。
他の UID を持つユーザでプロセスを起こす場合は、ワンクッション必要です。
また、daemon 本体のプロセスを起こした後は、
直ちにプロセスを終了する必要があります。

上記の文章の説明ではわかりづらいので簡単な絵を描くと

init → daemon 起動設定 → daemon 起動用プロセス → daemon 本体プロセス

と、流れていく感じになります。

そこで登場するのが「daemon プロセス起動用の go言語のプログラム」です。

上記の daemon 起動設定では、このプログラムを実行しています。
実際これを実行すると、「daemon プロセス起動用の go言語のプログラム」自体の
プロセスは消滅し、代わりに init を親とする daemon 本体のプロセスが残ります。

具体的に何を行っているのかは、サンプルソールのコメントを参照。

daemon プロセス起動用の go言語のプログラム

【2017/05/29】 golang / Revel | トラックバック(0) | コメント(0) | page top↑
Go言語で daemon を作ってみる その1
結局、Revel に関しては、あれ以降特に新たな発見は無く
わざわざエントリにするにはびみょーな状況のまま、
モノは完成してしまったわけです。

ただ、Linux の daemon プロセスの作り方に関しては、
どこも断片的&英語な情報しかなかったので
ちょっとまとめてみようかなと思いました。

とりあえず全3回。GitHub に上げたソースコード類の解説が中心です。

続きを読む
【2017/05/28】 golang / Revel | トラックバック(0) | コメント(0) | page top↑
我が家の家計 2017/5
今月の増加分:-135821
今までの増加:170333
車の減価償却引当て:2280000
レジャー費シーリング:379000/360000

今月は
・定期代を含むカード払い 190K
・車税金&保険 80K
・今年分の未計上家電費用 50K
とまあ、色々出費が重なったので割と大きめのマイナスです。

来月のカード払いは6万とかなり少な目です。
やっぱりレジャー費用の抑制が効いている感じです。

続きを読む
【2017/05/25】 家計 | トラックバック(0) | コメント(0) | page top↑
今月の密林 2017/5
今月はアフタヌーンと単行本が1冊です。

続きを読む
【2017/05/20】 アフィリエイト | トラックバック(0) | コメント(0) | page top↑
Revel埋立:dev モードと prod モードの違い
▼ dev モードと prod モードの違い

重要:デフォルトは dev(開発用)モードです。
エラー発生時に色々と見せちゃイケない情報がブラウザ上にだだもれになるので
商用環境では必ず prod(商用)モードを指定することを推奨します。

Revel は、オプション無しで起動すると、dev モードで起動します。

# revel run myapp


下記のように dev オプションを付けて明示的に dev モードでも起動できます。

# revel run myapp dev


prod モードで起動する場合は、下記のようにオプションの指定が必要です。

# revel run myapp prod


この dev モードと prod モードには色々と違いがあって
端的なのは、エラー時のブラウザの表示が替わることです。

これは、conf/app.conf でまるっきり dev と prod の設定を入れ替えても
変わらなかったので、設定でどーこーできるものではなく、
dev と prod は根本的に動きが異なるようです。

ちなみに、dev モードでもデフォルトの設定では後述する
TRACE レベルのログは出力されないので、conf/app.conf の設定を変更しています。

# Where to log the various Revel logs
#log.trace.output = off
log.trace.output = stderr

# 23 => log.Ldate|log.Ltime|log.Lmicroseconds|log.Lshortfile
log.trace.flags = 0


上記の変更は、TRACE レベルのログを stderr に出力するように設定してます。
log.trace.flags = 0 は、
こんな感じでヘッダとメッセージだけを出力するようにします。

TRACE adding template:  errors/500.xml
TRACE adding template: TestRunner/FailureDetail.html
TRACE adding template: TestRunner/Index.html


ちなみにアフォみたいに沢山出ますw

続きを読む
【2017/05/07】 golang / Revel | トラックバック(0) | コメント(0) | page top↑
NEW | ホーム | OLD