CentOS 7 で Phusion Passenger の passenger-status を実行するとエラーとなる

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

知らなかった。

  • CentOS Linux release 7.1.1503 (Core)
  • Passenger 5.0.21

以下のように passenger-status を実行するとエラーとなる。

~# passenger-status 
ERROR: Phusion Passenger doesn't seem to be running. If you are sure that it is running,
then the causes of this problem could be:

1. You customized the instance registry directory using Apache's PassengerInstanceRegistryDir option,
Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir
command line argument. If so, please set the environment variable PASSENGER_INSTANCE_REGISTRY_DIR to that
directory and run passenger-status again.
2. The instance directory has been removed by an operating system background service. Please set a different
instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's
passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir
command line argument.

特に設定をいじったりしていない。Passenger のドキュメントを確認する。

https://www.phusionpassenger.com/library/config/apache/reference/#passengerinstanceregistrydir

The default value for this option is as follows:

  • If you are on Red Hat and CentOS, and installed Passenger through the RPMs provided by Phusion, then the default value is /var/run/passenger-instreg.
  • Otherwise, the default value is the value of the \$TMPDIR environment variable. Or, if \$TMPDIR is not set, /tmp.

gem install passenger したものなので上記の後者。
探してみるが関係していそうなものが無い。

~# echo $TMPDIR

~# ls /tmp
ks-script-tlgcPw  systemd-private-mBNl7v  yum.log

ここで強引に探してみる。それらしきものが見つかる。

~# find / -iname '*passenger*'
... 省略 ...
/tmp/systemd-private-mBNl7v/tmp/passenger.aFePViS
... 省略 ...

指定してみると passenger-status が動く。

~# PASSENGER_INSTANCE_REGISTRY_DIR=/tmp/systemd-private-mBNl7v/tmp passenger-status 
Version : 5.0.21
Date    : 2015-11-30 23:36:48 +0900
Instance: 2Wqc3QMb (Apache/2.4.6 (CentOS) Phusion_Passenger/5.0.21)

----------- General information -----------
Max pool size : 6
App groups    : 1
Processes     : 1
Requests in top-level queue : 0

----------- Application groups -----------
/var/lib/redmine:
  App root: /var/lib/redmine
  Requests in queue: 0
  * PID: 2473    Sessions: 0       Processed: 1       Uptime: 5m 22s
    CPU: 0%      Memory  : 125M    Last used: 5m 22s ago

では systemd-private-xxxxxx とは何か。ググる。

http://stackoverflow.com/questions/30444914/php-has-its-own-tmp-in-tmp-systemd-private-nabcde-tmp-when-accessed-through-ng

Because systemd is configured to give nginx a private /tmp. If you must use the system /tmp instead for some reason then you will need to modify the .service file to read "PrivateTmp=no".

http://0pointer.de/blog/projects/security.html

Another very simple but powerful configuration switch is PrivateTmp=:

http://0pointer.de/public/systemd-man/systemd.exec.html#PrivateTmp=

If true, sets up a new file system namespace for the executed processes and mounts private /tmp and /var/tmp directories inside it that is not shared by processes outside of the namespace.

Passenger は Apache HTTP Server (yum でインストールしたやつ) が使っている。
Apache の PrivateTmp の設定値を確認する。
設定ファイルは下記で分かった。

~# systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
... 省略 ...

下記のように true だった。

~# cat /usr/lib/systemd/system/httpd.service 
... 省略 ...
PrivateTmp=true
... 省略 ...

正直よくわからない。