Macの環境(MacOS 10.14.6)において、Apacheを"sudo apachectl stop / start"で起動した場合と、"sudo httpd -k stop / start"で起動した場合とで、ウェブのプログラムの挙動が異なったので、いろいろ調べるとPATHなどの環境変数がそれぞれで異なっていました。
例えば、Perlにおいて、$ENVの内容を表示する以下のスクリプトを用意して、
$ pwd /Library/WebServer/CGI-Executables $ sudo vi printenv.cgi #!/usr/bin/perl print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\n|g; $val =~ s|"|\"|g; print "${var}=\"${val}\"\n"; }
- "sudo apachectl stop / start"でApacheを起動して上記のCGIをブラウザで実行すると、PATHは、
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
となるのですが、
- "sudo httpd -k stop / start"でApacheを起動して同様のCGIを実行すると、
PATH="/usr/local/opt/mariadb@10.1/bin:/Users/hogehoge/.pyenv/shims:/Users/hogehoge/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin"
と、Macにログインしているユーザーアカウントの環境変数PATHの値になります。
※CGIをブラウザで実行した際のURLは、http://localhost/cgi-bin/printenv.cgi
です。
当初、"sudo apachectl stop / start"でApacheの制御をしていたのですが、追加したモジュールに関するパスが通らずプログラムがエラーで止まってしまいました。
そこで試行錯誤しているうちに、"sudo httpd -k stop / start"でApacheを制御すると、パスが通って無事にプログラムが走ることに気が付きました。
今後のためにも、"apachectl"コマンドと"httpd"コマンドによるApache起動の違いを理解したく、いろいろ調べましたが明確な答えにたどり着けませんでした。
どなたか、"apachectl"コマンドと"httpd"コマンドによるApache起動の差、特に適用される環境変数がなぜこの2つの起動方法で異なるのか教えていただけないでしょうか。
よろしくお願いいたします。
補足
元々はPerlではなく、PythonのフレームワークDjangoとApache+mod_wsgiでMacローカル上でプログラムを作成している際に、上記の現象に遭遇しました。
この場合、環境変数の確認は以下の内容をブラウザに表示させる方法で確認しました。
python
1import subprocess 2proc = subprocess.run(["printenv"],stdout = subprocess.PIPE, stderr = subprocess.PIPE) 3context["cmd_result"] = proc.stdout.decode("utf8") #このcontext["cmd_result"]の値を画面に表示してPATHの内容を確認
この場合も、"apachectl"コマンドと"httpd"コマンドによるApache起動方法の違いでPATHの内容が、上記の1と2のように異なります。
各種バージョン
MacOS : 10.14.6
Apache : 2.4.34
perl : 5.18.4
Python : 3.6.5
Django : 2.1
mod_wsgi : 4.6.8
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/12 07:52 編集
退会済みユーザー
2020/02/12 08:17