daemontoolsやdaemonizeなどの外部ツールを使用せずに、起動時にデーモンとして実行したいシェルスクリプトを書いています。
Linux Daemon Writing HOWTO
Linux Daemon Writing HOWTOによると、適切なデーモンには次の特性があります。
- 親プロセスからの分岐
- クローズすべてのファイル記述子を(すなわち、
stdin
、stdout
、stderr
) - 書き込み用のログを開きます(設定されている場合)
- 作業ディレクトリを永続的なものに変更します(通常
/
) - ファイルモードマスク(umask)をリセットします
- 一意のセッションID(SID)を作成します
デーモン化入門
デーモン化導入はまた、典型的なデーモンを述べ、さらに行きます:
- 制御端末(存在する場合)との関連付けを解除し、すべての端末信号を無視します
- プロセスグループとの関連付けを解除します
- ハンドル
SIGCLD
どのように私はこのすべてを行うだろうsh
、dash
またはbash
唯一の共通のLinuxツールとスクリプト?
Debianは主な焦点ですが、スクリプトは追加のソフトウェアなしでできるだけ多くのディストリビューションで実行できるはずです。
注:またはの使用を推奨するStackExchangeネットワーク上の答えがたくさんあることは知っていますが、これらの方法はいずれも上記の要件のすべてに対応していません。nohup
setsid
EDIT:デーモン(7)のmanページには、古いスタイルのいくつかの違いがあるように見えるが、また、いくつかのポインタを与えるSysV
デーモンと新しいsystemd
もの。さまざまなディストリビューションとの互換性が重要なので、答えが違いを明確にするようにしてください。
daemon
、それらの他のもので実行するためのもので、任意として実行するための規定でシェルスクリプトをデーモン。あなたは著者であり、そのスクリプトの記述方法を完全に制御しているので、systemd unitfileまたはrc.dスクリプトから起動できるようにします。あなたはなかった「適切」を指定します!