uwsgiに再起動時に "/run/uwsgi"フォルダを作成させる最良の方法は何ですか?

uwsgiに再起動時に "/run/uwsgi"フォルダを作成させる最良の方法は何ですか?

uwsgiとnginxで実行するようにDjangoプロジェクトを設定し、再起動時にfsに/ run /フォルダが再作成されるまでuwsgiが正しく起動しないことを除いて、すべてが期待どおりに実行されます。 /runは "tmpfs"にマップされるため、起動するたびに再生成する必要があります。

uwsgi用に生成されたsystemdサービスファイルがあります。

[Unit]
Description=uWSGI Module
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=main

[Install]
WantedBy=multi-user.target

ファイル/etc/uwsgi.iniは次のとおりです。

[uwsgi]
uid = uwsgi
gid = uwsgi
pidfile = /run/uwsgi/uwsgi.pid
stats = /run/uwsgi/stats.sock
socket = /run/uwsgi/uwsgi.sock
master = true
processes = 1
chdir = /path/to/our/django/app
module = icscada
max-requests = 100
daemonize = /var/log/uwsgi.log

/run/uwsgi起動するたびにフォルダを再作成するための推奨方法は何ですか?

答え1

tmpfiles.d(5)から:

システムデーモンには、通信ソケットや同様のディレクトリに対応するために/ runの下にプライベートランタイムディレクトリが必要なことがよくあります。これを可能にする場合は、RuntimeDirectory =(詳細についてはsystemd.exec(5)を参照)を使用してユニットファイルで宣言することを検討してください。

そしてsystemd.exec(5)から:

ランタイムディレクトリ=、ランタイムディレクトリモード=

ディレクトリ名のリストを取得します。設定すると、デバイスの起動時に/run(システムサービスの場合)または$ XDG_RUNTIME_DIR(ユーザーサービスの場合)の下に指定された名前の1つ以上のディレクトリが作成され、デバイスが停止すると削除されます。これらのディレクトリはRuntimeDirectoryMode =で指定されたアクセスモードを持ち、User =とGroup =で指定されたユーザーとグループが所有します。これを使用して、ユニットの1つ以上のランタイムディレクトリを管理し、そのライフサイクルをデーモンランタイムにバインドします。

つまり、この「作業」を達成するためにtmpfiles.dを使用するときに正式に推奨される方法は、以下を追加することです。

RuntimeDirectory=uwsgi

[Service]あなたのユニットファイルに。

これは短く、正しいユーザー/グループの所有権で作成されたことを保証し、デーモンが停止したときにディレクトリをクリーンアップするという利点があります。

答え2

/etc/tmpfiles.d/起動/起動中にsystemdがディレクトリを作成する必要があることを定義する設定ファイルを作成する必要があります。

はい

$ more /etc/tmpfiles.d/uwsgi.conf 
D /run/uwsgi 0770 uwsgi uwsgi -

状況に適していると思われる所有権/権限を設定してください。

メモ:uwsgi上記の設定を使用している場合は、Nginxユーザーにこのグループを追加する必要がありますnginx

$ sudo usermod -a nginx -G uwsgi

引用する

答え3

結局のところ、この問題を解決したのは、最新のディストリビューションを使用することでした。 Fedora 20では、yum install uwsgiこれらすべての詳細が自動的に処理される環境を構築しましたが、以前はFedora17システムで偽物を試しましたが、yumリポジトリでは使用できませんでした。

Fedora 20は、uwsgiサービスユニットに以下を追加してこの問題を解決します。

ExecStartPre=/bin/mkdir -p /run/uwsgi 
ExecStartPre=/bin/chown uwsgi:uwsgi /run/uwsgi

答え4

インストールしているパッケージuwsgi(CentOS 7のデフォルトパッケージ)にはすでに正しい/usr/lib/tmpfiles.d/uwsgi.confファイルが含まれています。ただし、ディレクトリはまだ存在しません。再起動すると再起動時にsystemd-tmpfiles作成される可能性がありますが、私の場合は -

私は走らなければなりません

systemd-tmpfiles --create

パッケージのインストール直後にディレクトリを作成できるようにするためです。

関連情報