スーパーバイザーの下でいくつかの異なるプログラムを実行しているUbuntu 14.04 LTSサーバーがあります。プログラムの多くは、ソケットやその他の名前付きパイプをファイルシステムに格納する必要があり、/run
これらの種類のファイルには理想的な選択肢のようです。残念ながら、/run
tmpfs は再起動のたびに削除され、各プログラムが書き込み可能なディレクトリを (再) 作成するには root 権限が必要です。
にいくつかのサブディレクトリを作成し/run
、所有者/モードを各プログラムが動作できるものに設定する方法が必要です。スーパーバイザーがそれらを起動しようとする前に、再起動するたびにそうします。Supervisor が、プログラムを開始する前に開始前コマンドを実行するメカニズムをサポートしているようには見えません。
このタイプの質問に対する他のほとんどの回答は、init スクリプトで実行することを提案していますが、それは Supervisor のパッケージに属しており、私はそれを台無しにしたくありません (または、アップストリームが変更されたときに維持する必要があります)。
このマシンに Systemd があれば、 を使用できるように見えます/etc/tmpfiles.d
が、使用できません。
私が思いついた最良のアイデアはpre-start
、実際にプロセスを起動せずにディレクトリを作成するだけの個別の Upstart スクリプトをプログラムごとに使用することでした。何かのようなもの:
/etc/init/myapp1.conf
start on runlevel [2345]
pre-start script
mkdir -p -m 0755 /var/run/myapp1
chown app1user: /var/run/myapp1
end script
...線なしexec
で。これが有効であるか正気であるかについて 100% 確信があるわけではありませんが、機能しているようです。このようなことを行うためのよりクリーンな方法はありますか?