読者です 読者をやめる 読者になる 読者になる

systemd: systemctl start foobar@hogehogeのように動かす.serviceファイルの記述

systemd linux

個人的に使ってvps環境でuwsgiを使ったアプリケーションを動かすのにどうやって起動・終了するか?ということを考えるとsystemdを選ぶのですが(vpsCentOS 7環境なので。あと普段使ってるArchもsystemdだからというのも)、できたらアプリごとに.serviceは書きたくないよなーというときにどうやるのかを調べた結果のめも。
例えば、OpenVPNで接続するはsystemctl start openvpn@ユーザー名というふうにしているのでこの方法でイケるはず、ということで下記のような書き方でOKだった( ´∀`)bグッ!

まず、ファイル名の.serviceの前に@をつけた名称にする。
これで systemctl start uwsgi@アプリ名とすると%iでアプリ名が取れるのでこれで切り替えが可能。アプリ名をfoobarとした場合、/usr/local/etc/uwsgi/foobar.iniを読み込み、pidファイルとして/run/uwsgi@foobar.pidというファイルが作られる。

[root@www3221u uwsgi]# cat /etc/systemd/system/uwsgi\@.service
[Unit]
Description=run uwsgi application %i
After=network.target remote-fs.target nss-lookup.target

[Service]
ExecStart = /usr/bin/uwsgi --ini /usr/local/etc/uwsgi/%i.ini --pidfile /run/uwsgi@%i.pid
ExecReload = /usr/bin/uwsgi --reload /run/uwsgi@%i.pid
ExecStop = /usr/bin/uwsgi --stop /run/uwsgi@%i.pid
Type = notify
PIDFile=/run/uwsgi@%i.pid

[Install]
WantedBy=multi-user.target

enable/disableはsystemctl enable uwsgi@foobarとすればok。