web-dev-qa-db-ja.com

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

Djangoプロジェクトをuwsgiとnginxで実行するように設定しましたが、すべて再起動したときに、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フォルダを再作成するための推奨される方法は何ですか?

6
Octopus

最終的にこの問題を解決した方法は、最新のディストリビューションを使用することでした。 Fedora 20とyum install uwsgiこれらの詳細すべてが自動的に処理される環境を構築しましたが、以前は、yumリポジトリで利用できないFedora17システムにこれをあざけようとしていました。

Fedora 20がこれを解決する方法は、これをuwsgiサービスユニットに含めることです。

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

Tmpfiles.d(5)から:

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

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

RuntimeDirectory =、RuntimeDirectoryMode =

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

言い換えれば、この「動作する」ためにtmpfiles.dを使用している間、公式に推奨される方法は、

RuntimeDirectory=uwsgi

ユニットファイルの[Service]セクションに追加します。

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

15
kevmitch

/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

参考文献

5
slm

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

走る必要があった

systemd-tmpfiles --create

すぐにディレクトリを作成するためにパッケージをインストールした後。

0
andrew

複数のExecStartPreのコマンドは、.serviceファイルにリストされているのと同じ順序で実行されるとは限りません。

機能するのは、次のようにすべてのコマンドを1つのsh呼び出しに結合することです。

ExecStartPre=/bin/sh -c 'mkdir -p /run/uwsgi ; chown uwsgi:uwsgi /run/uwsgi'
0
R. Toma