Posted at

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

More than 3 years have passed since last update.

知らなかった。


  • 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
... 省略 ...

正直よくわからない。