passenger-status コマンドが使えない
Passenger を Ubuntu にインストールして passenger コマンドを使おうとしたらこんなエラーが
なんで大事なのか?
/tmp ディレクトリに pid ファイルとかがそのまま置いてあると、他のプロセスがアクセスしようと思えばできてしまいます。
そういういたずらを防ぐためにとても大事な機能なんですね。
下記の蝶野まこさんのブログがとてもわかり易いので読んでみてください。
/tmp/systemd-private-* の意味について | 晴耕雨読
https://tex2e.github.io/blog/linux/tmp-systemd-private
で最初に戻りますが、 passenger-status コマンドでエラーが出たらどうすればよいのか?
https://github.com/square/debug_socket/issues/4#issuecomment-250213414
でもいいのです。
蝶野まこさんのブログが紹介できたので、これを読んで PrivateTmp の大事さがわかってくれる人が増えてくれれば。
# passenger-status
...
/phusion_passenger/admin_tools/instance.rb:94:in `initialize':
too long unix socket path (116bytes given but 108bytes max) (ArgumentError)
なんでだろう?と思ったら、tmp ファイルの中のディレクトリ名が長すぎるとのこと。# cd /tmp
# ls -la
...
drwx------ 3 root root 4096 9月 24 17:35 systemd-private-2564dd8c0ded4ef6a37876fd7232108f-apache2.service-S1DBLi/
これは systemd の設定の中で PrivateTmp という機能が効いているときに発生します。# cat /lib/systemd/system/apache2.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/
[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true ← これ
Restart=on-abort
[Install]
WantedBy=multi-user.target
じゃあこれをオフにすればいいじゃない?と思いますがこの機能は結構大事な機能なのでできればONにしておきたいです。なんで大事なのか?
/tmp ディレクトリに pid ファイルとかがそのまま置いてあると、他のプロセスがアクセスしようと思えばできてしまいます。
そういういたずらを防ぐためにとても大事な機能なんですね。
下記の蝶野まこさんのブログがとてもわかり易いので読んでみてください。
/tmp/systemd-private-* の意味について | 晴耕雨読
https://tex2e.github.io/blog/linux/tmp-systemd-private
で最初に戻りますが、 passenger-status コマンドでエラーが出たらどうすればよいのか?
https://github.com/square/debug_socket/issues/4#issuecomment-250213414
# GOTCHA: if the Rails.root.join("tmp", "sidekiq-debug-#{Process.pid}.sock")
# path is too long, this will fail. The max on Linux is 108 characters, MacOS
# is 104. If the path is too long, try using a relative path or /tmp/<blah>.
しょうがないのでシンボリックリンクを作成して対処します。
今のところはこんな力技しかありません。
シンボリックリンクは用事が終わったら削除してください。
# cd /tmp
# ls -la
...
drwx------ 3 root root 4096 9月 24 17:35 systemd-private-2564dd8c0ded4ef6a37876fd7232108f-apache2.service-S1DBLi/
# ln -s systemd-private-2564dd8c0ded4ef6a37876fd7232108f-apache2.service-S1DBLi tmpass
# PASSENGER_INSTANCE_REGISTRY_DIR=/tmp/tmpass/tmp passenger-status
Version : 6.0.15
Date : 2022-09-25 17:38:57 +0900
Instance: 5X4gTYWE (Apache/2.4.41 (Ubuntu) SVN/1.13.0 OpenSSL/1.1.1j Phusion_Passenger/6.0.15)
----------- General information -----------
Max pool size : 6
App groups : 1
Processes : 1
Requests in top-level queue : 0
----------- Application groups -----------
/var/lib/redmine (production):
App root: /var/lib/redmine
Requests in queue: 0
* PID: 72465 Sessions: 0 Processed: 5 Uptime: 2m 25s
CPU: 0% Memory : 65M Last used: 1m 20s ago
# rm /tmp/tmpass
なんかスッキリしませんね。でもいいのです。
蝶野まこさんのブログが紹介できたので、これを読んで PrivateTmp の大事さがわかってくれる人が増えてくれれば。
コメント