Unix Daemon

http://homepage.hispeed.ch/py430/python/index.html
http://homepage.hispeed.ch/py430/python/daemon.py
http://homepage.hispeed.ch/py430/python/daemon (init.dサンプル)
オリジナルはこちら
Fork a daemon process on Unix
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012


yasusiiさめに教えてもらったもの。
Creating a daemon the Python way
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731


前者のほうがシンプルでわかりやすい感じ。実コードはmain()に押し込めばいい感じだし。
後者はコメントが多くて勉強になるけど、量があるので英語にめげる。

とりあえずdaemon化

スレッド化については、DAAPでは、最低2セッションの維持が必要になるので、DaapHTTPServer.ThreadingDaapHTTPServerを作った。


上の記事の後者、daemon.pyを使ってdaemon化をする。
はじめは、daapd.mainを呼び出すようにしていたが、Zeroconf関係の処理をdaemon.pyに移すなら、マージしたほうがいいかということで1つにしてしまう。


daemon.pyのライセンスが要確認だ。
PythonCookbookには、何かデフォルトのライセンス規定があるのだろうか?


pidをSIGTERMしたら、Zeroconfの取り消しはできるようになったけど、プロセスが終わらない。子プロセスも残ったままだ。
まだ先は長そうだな... まだ本題に入ってないというのに(--;。

続きを読む

ライセンスって、バージョンごとに違うの?

http://www.python.org/psf/license/
OSSL準拠の2.1から変更ないかと思ってたけど、バージョン毎に違うのか。
参ったな...
コンフリクトしないためには、2.1 or laterって書くしかないのかな。

# Python Software Foundation License Version 2 http://wiki.python.org/moin/PythonSoftwareFoundationLicenseV2Easy

指摘修正

yasusiiさめに突っ込まれたところは、こんなもんで。

# ps ax --forest
 6201 ?        Ss     0:01  \_ sshd: kinneko [priv]
 6203 ?        S      2:32      \_ sshd: kinneko@pts/2
 6204 pts/2    Ss     0:04          \_ -bash
 6825 pts/2    S      0:00              \_ su -
 6826 pts/2    S+     0:06                  \_ -su
 7168 ?        S      0:00 /usr/bin/python ./daapd.py
 7169 ?        R      0:00  \_ /usr/bin/python ./daapd.py
 7170 ?        S      0:00      \_ /usr/bin/python ./daapd.py
 7171 ?        S      0:00      \_ /usr/bin/python ./daapd.py

ふぅ... まだ先は長い。
やっぱ、プログラマ向きじゃないのね...

続きを読む

ちょっとしたファイルのやりとりをhttpでたりたい時

なんか、サーバー入れてやりとりするのも手間でイヤだけど、Pythonは入っている場合、webサーバーを動かしてしまえばいい。

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"

port 8000で立派なhttpサーバーが立ち上がり、ブラウザでアクセスすれば、ディレクトリインデックスを表示してくれる。
あとはダウンロードするだけ。
ブラウザ使うのがめんどくさければ、パスはシンプルだから。wgetで十分役に立つ。

サーバーを2つに分けるなら

プロセス間通信をしないといけないのよね...
python-ipc
http://www.ka.sara.nl/home/walter//python-ipc/
Socket Programming HOWTO
http://www.amk.ca/python/howto/sockets/
pIPC: Inter-Process Communication wrapper class
http://software.fionet.com/pIPC/
pipe_rpc: RPC over pipes
http://www.k1024.org/pipe_rpc/
pyipc: Python bindings to System V IPC
http://const.tltsu.ru/
remoteD
http://remoted.neurokode.com/
この前書いたPyroがよさげかな...
こいつもわかりやすい感じ。
spoonrpc: Distributed message passing IPC system
http://www.zarrf.com/SpoonRPC/