Значение переменной среды не получается с помощью getenv () в PHP, когда файл PHP запускается из сценария bash - PullRequest
0 голосов
/ 15 января 2020

StartPHPDaemon

#!/bin/bash
currdate=$(date +'%m%d%y')
curpath=$(readlink -f ${0%/*})

php_file=$curpath/ExecuteJobFromQueue.php
base_php=$(basename $php_file)
for pids in $(ps aux | grep $base_php  | grep -v grep | awk '{print $2 '})
do
        kill $pids
        echo "Killing $pids"
done


#echo $currdate          >> $curpath/logs/StartService_${currdate}.LOG
#date +'%R:%S'           >> $curpath/logs/StartService_${currdate}.LOG
nohup php $php_file "E" > /dev/null 2>&1 &

ExecuteJobFromQueue. php

...// rest of the code

$server_config_path=getenv('CONFIGPATH');

wh_log("Server config path: ".$server_config_path,"INFO");

...// rest of the code

Я хочу получить значение CONFIGPATH из / etc / profile

Когда я запускаю StartPHPDaemon из пути, куда помещается файл, он извлекает значение, используя следующую команду ./StartPHPDaemon.

Вывод (журнал):

[15-Jan-2020 11:01:33]  INFO:   Server config path: /home/Project/Workspace/ConfigFile/dmimasterserver.config

Но когда я запускаю его по пути root с помощью команды sudo sh /home/Project/StartPHPDaemon, значение становится пустым.

Вывод (журнал):

[15-Jan-2020 11:01:33]  INFO:   Server config path: 

Я испробовал все решения для работы со стеком, но безрезультатно.

/ etc / profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

CONFIGPATH="/home/Project/Workspace/ConfigFile/dmimasterserver.config"
export CONFIGPATH


1 Ответ

0 голосов
/ 15 января 2020
Профиль

/ etc / доступен только для чтения, если bash является интерактивным или неинтерактивным, но вызывается с параметром --login. Я бы запустил демон с помощью

bash --login ./StartPHPDaemon

и для отладки выполнил

echo CONFIGPATH=$CONFIGPATH

в этом сценарии.

...