起動時に/var/run/にディレクトリを作成する

起動時に/var/run/にディレクトリを作成する

私はUbuntu Server 10.04で動作するapache2とpostgresを使用しています。
両方のアプリケーションの起動スクリプトを削除し、スーパーバイザーを使用してそれらを監視および制御しています。私が経験している問題は、両方のディレクトリがpidファイルを保持するために/ var / run(実行中のユーザーとして正しい権限を持つ)にディレクトリが必要であることです。ルートとして作成し、正しいユーザーに権限を付与する必要があるため、起動中にどのように作成しますか?

編集する
最良の方法は、カスタム初期化スクリプトを使用してディレクトリを作成するようです。シェルスクリプト技術が全くないのですが、どうすればいいですか?

答え1

~によるとDebian ポリシー

/var/run/var/lock一時ファイルシステムとしてマウントできるため、スクリプトinit.dはそれを正しく処理する必要があります。これは通常init.d、パッケージにサブディレクトリを含め、dpkgを使用して生成するのではなく、スクリプトの実行中に必要なサブディレクトリを動的に生成するのと同じです。

明らかに、UbuntuはDebianを継承し、私が知っている限り、このポリシーは変更されませんでした。

最善の解決策は、サービスの起動時にこれらのディレクトリが存在しない場合に生成されるように新しい起動スクリプトを変更することです。

答え2

この種のものは "/etc/rc.local"に配置する必要があります。例:

#!/bin/sh -e
# 
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

if [ ! -d /var/run/foo ]; then
  mkdir /var/run/foo/
  chown user1:group1 /var/run/foo/
fi
if [ ! -d /var/run/bar ]; then
  mkdir /var/run/bar/
  chown user2:group2 /var/run/bar/
fi
exit 0

答え3

このコメントに返信してください:

現在、サービスの起動スクリプトはありません。スーパーバイザーデーモンはinit.dスクリプトによって開始され、その後別のサービスを開始するため、rootとして実行しないでください。

スーパーバイザがinit.dスクリプトから起動する場合は、init.dスーパーバイザが起動する前に別のスクリプトを作成してデフォルト設定を実行してください(実装方法は完全に** IXバージョンによって異なります)。

そのメソッドstartに必要な権限を持つ必須ディレクトリを作成します。

そのメソッドstopでこれらのディレクトリを解体します。

答え4

いくつかのオプションが表示されます。

  1. インストール中のディレクトリの作成
  2. 起動時に作成したいすべてのディレクトリのファイルを作成し、これらすべてのファイルを生成し、起動時に実行するプログラムを作成します(root権限を持つ起動スクリプトから)。

これを繰り返す他のオプションも機能します。

関連情報